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

4
如果我需要在0800-1700小时之间执行清理任务,哪个更好?清理例程应该每30分钟启动一次。
我可以在Windows应用程序中设置一个定时器,每30分钟触发一次并检查时间,如果在时间范围内,则调用清理例程或像Windows服务一样执行相同的操作。
或者使用Windows计划程序,每30分钟启动一次,应用程序将检查时间并确定是否在时间范围内,进行清理并结束。
4个回答

19
为了简单起见,我会创建一个基本的控制台应用程序来执行所需的清理操作。该应用程序中不需要包含计时器或调度代码。
然后,我将设置Windows计划程序以在所需的时间/间隔运行它。此外(正如Fredrik在评论中所说),如果需要,您也可以轻松手动运行控制台应用程序。
我不建议创建Windows服务,除非您需要在没有任何人登录时运行任务,但是这种情况下您还需要处理在交互式用户下以不同特权运行的问题。此外,即使没有任何人登录,计划任务也可以运行(感谢Rob)。

+1 这也有一个好处,即您可以轻松地手动触发它,以防将来需要。 - Fredrik Mörk
+1,但是我想补充一下,Windows计划任务可以在没有任何人交互登录的情况下运行任务。除非你需要一直运行,否则通常没有必要作为Windows服务运行 =) - Rob

2
你应该查看Quartz Enterprise Scheduler(开源)的.NET版本。你可以在Spring.NET网站上找到它。
就我个人而言,我认为构建一个利用Quartz Enterprise Scheduler的Windows服务是实现你所要求的整洁方式,并且将独立于Windows计划程序。在我的公司中,每台机器(包括服务器)都禁用了Windows计划程序,因为一些病毒会利用它来传播自己。

1

你需要权衡的是:

  1. Windows 应用程序。需要有人登录并运行应用程序。

  2. 带有 Windows 计划程序的控制台应用程序。需要有人登录。

  3. Windows 服务。如果您不需要访问已登录用户的桌面,并且需要在有人登录或无人登录时运行,则这是唯一的选择。


0

其他人说的都对。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接