我有一个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应用程序中尝试相同的代码和相同的配置,它的工作方式就像它应该做的那样。
发布于 2022-02-16 21:54:58
在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也是如此。
https://stackoverflow.com/questions/71115614
复制相似问题