Windows应用程序或Windows服务定期在0800-1700之间运行

时间:2010-02-05 13:29:23

标签: c#

如果我必须在0800-1700hrs之间执行清理任务,哪两个更好。清理程序应该每30分钟启动一次。

我可以在Windows应用程序中放入一个计时器,每隔30分钟就会触发一次并检查时间,如果在时间范围内,则调用清理程序或执行与Windows服务相同的操作

或Windows调度程序每30分钟启动一次,应用程序将检查时间并确定它是否在时间范围内,进行清理并下车..

4 个答案:

答案 0 :(得分:19)

为了保持简单,我将创建一个执行所需清理的基本控制台应用程序。此应用程序中没有计时器/调度代码。

然后我会设置一个Windows计划,以所需的时间/间隔运行它。另外(正如Fredrik在评论中所说),如果需要,您可以轻松地手动运行控制台应用程序。

除非您在没有人登录时需要运行任务,否则我不会建议创建Windows服务,但是您还需要处理来自交互式用户的不同权限下的运行。此外,当没有人登录时,可以运行计划任务(感谢Rob)。

答案 1 :(得分:2)

您应该查看.NET的Quartz Enterprise Scheduler(开源)。您可以在Spring.NET网站上找到它。

我个人认为构建一个使用Quartz Enterprise Scheduler的Windows服务将是实现您所要求的一种整洁方式,并且将独立于Windows调度程序。在我的公司中,Windows调度程序在包括服务器在内的每台机器上都被禁用,因为有些病毒利用它来传播它们。

答案 2 :(得分:1)

您的权衡是:

  1. Windows应用。需要有人登录并且应用正在运行。

  2. 使用Windows Scheduler的控制台应用程序。需要有人登录。

  3. Windows服务。如果您不需要访问登录的桌面,并且无论是否有人登录都需要它,那么这是唯一的选择。

答案 3 :(得分:0)

其他人都说了什么。

唯一需要注意的是,如果您需要通过某种类型的界面来管理任务计时(例如,业务运营商希望它从0700开始运行,或者他们希望能够禁用该作业)。在这种情况下,您可以通过Power Shell以编程方式操作任务调度程序,或者让它检查一个标志以查看是否要运行它。