C# 调度程序没有';不执行作业,不执行';我似乎连注册都没有

C# 调度程序没有';不执行作业,不执行';我似乎连注册都没有,c#,windows-services,quartz-scheduler,quartz.net,quartz.net-2.0,C#,Windows Services,Quartz Scheduler,Quartz.net,Quartz.net 2.0,我创建了以下内容: Awindows服务 石英调度器类 一个名为Worker的单个IJob实现,其中包含一组我打算通过Quartz调度器执行的任务 windows服务覆盖OnStart以调用scheduling/setup类,该类尝试在Quartz中创建一个我希望在给定时间范围内运行的计划任务(目前,这只是每30秒一次,例如,用于测试进程) 我使用了与其中一个示例相同的代码来创建作业和触发器-触发器包含一系列代码,可以立即启动,并永远每隔30秒重复一次 然后调用调度器对象上的Schedule

我创建了以下内容:

  • Awindows服务
  • 石英调度器类
  • 一个名为
    Worker
    的单个
    IJob
    实现,其中包含一组我打算通过Quartz调度器执行的任务
windows服务覆盖OnStart以调用scheduling/setup类,该类尝试在Quartz中创建一个我希望在给定时间范围内运行的计划任务(目前,这只是每30秒一次,例如,用于测试进程)

我使用了与其中一个示例相同的代码来创建作业和触发器-触发器包含一系列代码,可以立即启动,并永远每隔30秒重复一次

然后调用调度器对象上的
Schedule()
,并最终调用
Start()

我使用installutil.exe将服务推到服务列表中,启动服务,看到内部日志框架显示服务正在启动,计划程序正在创建,作业已安排好(自从我遇到问题以来,逐行记录输出…)问题在于任务不会运行一次,也不会重复。服务在那里愉快地运行着,但从未启动以执行任何操作

如果我使用Exists方法,传入JobKey,它总是说false。作业计数为零,在调度和启动调度程序后立即进行测试

我正在使用以下方法设置IJobDetail:

IJobDetail job = JobBuilder.Create<Worker>()
                .WithIdentity("job1", "group1")
                .Build();
然后把它连接起来:

sched.ScheduleJob(job, trigger);
sched.Start();
我不知道为什么会发生这种情况,事件日志中没有任何内容,服务也没有任何问题,代码似乎运行正常,因为我在每一行之后都插入了日志语句(输出到/bin/debug中的txtfile&有很多异常处理

有什么想法吗?泛型Create上的Build()是否会告诉调度程序我定义的类型是
Execute()
方法所在的位置

编辑 我从(@jadenedge的答案)中找到了配置部分,并将其放在Windows服务的app.config中。1.0/2.0不匹配的可能性


理想情况下,我希望在app.config中进行配置,并且在其他地方没有其他配置。

您是否正在启动一个线程以保持进程运行?服务启动后,您的进程是否仍在内存中?

我遇到了这个问题,哦,天哪,这让我简直疯了。碰巧我有一个spike项目,我可以随时运行,但我的主要项目无法运行

问题:我的项目名称空间中有点/句点,例如,
MyProject.UpdateService
,其中我的spike被简单地命名为
QuartzTest

逐行调试发现,当我将Windows服务名称设置为
MyProjectUpdateService
时,Quartz作业随即注册

TL/DR: 确保Windows服务的名称中没有点


更新:我做了更多的测试,看起来运行Quartz的Windows服务的服务名称的最大长度是25个字符。它不会出错-只是不会启动。

您是否正在启动一个线程以保持进程运行?服务启动后,您的进程仍然处于内存中吗?好问题——没有明确地创建一个新线程——但我不习惯使用Windows应用程序或Windows服务,所以我不知道我需要考虑在单个线程上启动一个或多个进程。Win Svc本身在运行后会存储在内存中started@PeterRitchie-你实际上引导我解决了我的问题-我确实需要一个单独的线程来保持进程在后台运行,一旦这一点到位,它就开始走到一起。如果你想把你的评论作为问题发表,我会接受的!认真地我想这是我的问题,我的服务名中有一个句号和30个字符。如果这是个问题,我就去找斧子。是不是问题?显然不是。“StartNow”似乎意味着“等待[10分钟]直到下一个运行时”,但随后我从Execute返回了一个从未调用过的任务。
sched.ScheduleJob(job, trigger);
sched.Start();