我刚才读到:将应用程序开发为Windows服务有什么好处?但我仍然不确定何时使用Windows服务.
我有几个任务需要间隔运行(即每5分钟).我应该使用哪种项目类型?是否有应该是Windows服务的应用程序类型的示例?
对于任何计划任务,我通常会推荐Windows服务,原因如下:
即使用户未登录到PC,Windows服务也会运行(即使服务器处于登录提示位置也会运行)(***注意 - 这可能取决于您运行的Windows版本).
服务可以作为网络服务或本地系统等高权限帐户或用户运行 - 它们在这方面具有更多可配置性
一个服务还内置了运行时启动,停止,重启和暂停的选项(有时)
您还可以为服务设置故障条件,例如,如果它失败则自动重新启动
至于可以作为Windows服务的应用程序的其他示例,很多时候它们对远程处理等应用程序很有用 - 您可以让服务运行客户端连接到的远程服务器.对于您希望在后台运行的数据处理任务,或者您希望在某些条件下发送电子邮件的流程等,显然非常有用.
总的来说,我总是发现计划任务更加脆弱和不可靠.除非你让它们正确记录,否则通常更难调试.
参考Timer的错误 - 如果您阅读了MS网站上的错误报告,您可以看到它是在Timer_Elapsed事件中调用"Stop"时引起的.答案很简单 - 不要叫停.相反,将整个事物包装在一个"IsRunning"布尔值的检查中,并且仅在IsRunning为false时才运行.即使计时器没有问题,您仍然需要这样做,因为如果执行时间超过计时器间隔,计时器可能会在执行期间重新启动.
无论如何,我仍然认为使用预定任务是一个弱的解决方案,并给我闪回Windows 95.
对于按计划运行的单个或窄目的应用程序,通过任务计划程序运行控制台应用程序几乎总是正确的设计.
对于可能需要交互的长时间运行或复杂任务,例如手动启动,停止,暂停,继续等,通常,Windows服务是更好的选择.
计划任务可以在任何帐户下运行,并且不需要像服务一样登录用户.对于单一目的任务,例如您建议的外部控制任务通常是无关紧要的,因此您不需要服务的可控性.
一个重要因素是Task Scheduler是一个非常强大和灵活的基于事件的调度程序.您最不可能编写一个更强大的调度程序,可以处理时间变化和基于触发器的调度.事实上,有很多关于使用计时器在本网站的服务中安排任务的问题,而且质量差或完全不正确的答案数量(包括一些"正确的"答案)非常值得注意.
编辑:有趣的是,微软的政策正在转向使用服务进行基于任务的操作.如果您检查Vista,Win2K8和Win7,您会发现越来越多的特殊用途计划任务执行系统维护和许多系统服务.