1

我有一个 Windows 服务,它(至少曾经)从 xml 配置文件创建作业。但是我无法让它工作。

这是我的 xml (jobs.config)

<?xml version="1.0" encoding="UTF-8"?>
<job-scheduling-data
xmlns="http://quartznet.sourceforge.net/JobSchedulingData"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0">
<schedule>
  <job>
        <name>FirstJob</name>
        <group>DummyGroup</group>
        <description>This is FirstJob</description>
        <job-type>Test.TestJob, Test</job-type>
   </job>
  <trigger>
      <simple>
          <name>nativeJobExampleSimpleTrigger</name>
           <group>nativeJobExampleSimpleTriggerGroup</group>
            <description>Simple trigger to simply fire sample job</description>
            <job-name>FirstJob</job-name>
            <job-group>DummyGroup</job-group>
            <misfire-instruction>SmartPolicy</misfire-instruction>
            <repeat-count>5</repeat-count>
            <repeat-interval>5000</repeat-interval>
      </simple>
    </trigger>
</schedule>

这是创建我的工作的代码。

var jobs = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "jobs.config");
            
var properties = new NameValueCollection
                 {
                   ["quartz.scheduler.instanceName"] = "XmlConfiguredInstance",
                   ["quartz.threadPool.threadCount"] = "5",
                   ["quartz.threadPool.threadPriority"] = "Normal",
                   ["quartz.plugin.xml.type"] = "Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz",
                   ["quartz.plugin.xml.fileNames"] = jobs
                 };

var sf = new StdSchedulerFactory(properties);
sched = sf.GetScheduler();
sched.Start();

var jgn = sched.GetJobGroupNames();
var count = jgn.Count;

无论我尝试什么,价值count总是为零,我的工作没有开始。配置文件的路径是正确的(我尝试将文件重命名为 1jobs.config 并得到“找不到文件异常”。

我从文档中尝试了几个配置和代码示例,结果是一样的。将属性移动到 myservice.exe.config 也不会改变任何内容。Jobs.config 对每个人都有读取权限。

但是,如果我在 WinForms 应用程序中尝试相同的代码和相同的配置,它会像预期的那样工作。

4

1 回答 1

0

在 Windows 服务中Assembly.GetExecutingAssembly().Location可能会返回类似C:\Windows\system....

要么尝试

var jobs = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "jobs.config");

甚至更好的尝试

               ["quartz.plugin.xml.fileNames"] = "~/jobs.config"

Quartz.NET 3.0~可以正确处理,也许 2.0 也可以。

于 2022-02-16T21:54:58.130 回答