如何按计划启动和停止Windows服务?

时间:2012-02-02 14:58:56

标签: c# windows-services

我已经编写了一个服务来执行批处理职责,但要求是在下午4:00开始处理并在凌晨5点结束处理。如果仍在处理作业,则需要延长时间直到作业完成。

我会在计时器中包装onstart电话还是什么?我真的不知道这会是什么样子,因为我习惯于服务开始和运行直到无穷大(或直到盒子坦克......或者一个未处理的例外)。

我非常感谢有关如何实现这一目标的一些想法。

编辑:我确实需要服务,因为我通过dtexec()和C#中的批处理文件执行SSIS包。其他一些事情也必须发生,例如记录到dbase和队列管理。

每个作业的时间长度各不相同,有些会在几分钟内完成,有些则需要5个小时。

5 个答案:

答案 0 :(得分:4)

这听起来像Windows任务计划程序更好地处理的任务。除非您运行的是Win2K或XP,否则它具有在特定时间启动所需的所有设置,允许它在有限的时间内运行,它可以在特定凭据下启动该进程(如果您需要它运行)升级),以及没有人登录时运行。

它有一个非常方便的GUI来管理它,无需编码!

<强>更新

好的,根据您的评论,您真正需要的是工作流程。我要做的是,在单独的项目中开发每个单独的任务(单独的.exe或.dll,具体取决于您的需要)。然后查看并Windows Workflow Foundation并开发一个工作流程“控制器”,您可以使用它来运行各个任务。

答案 1 :(得分:1)

我认为该服务应该运行到无穷大并检查时间,看看是否已经是下午4:00,如果是的话,开始它的工作,当凌晨5点开始时,只需完成并再次下午4:00。

答案 2 :(得分:1)

您要找的是scheduled job

如果你/必须/有一个Windows服务,你使用计时器并设置计时器每次检查一次(每当我用这种东西30分钟),如果时间是凌晨4点到凌晨5点,那就行了。

答案 3 :(得分:1)

您可以查看quartz.net,这是一个很好的调度库,可以执行此类操作,并可以在您的服务中运行。

答案 4 :(得分:1)

三个选项:

  1. 您可以使用Windows任务计划程序并在指定时间启动任务,然后在程序中跟踪任务运行的时间。

  2. 让服务不断“运行”,但在执行之间休眠一段时间。但是,如果程序的运行时间超过预期,则会导致问题。

  3. 将服务设置为以15分钟(左右)的间隔运行,并检查它是什么时间。如果是在您的开始阶段,请启动该程序。

  4. 第一和第三似乎是最好的选择。