Windows services 维护任务的Windows服务或任务计划程序?

Windows services 维护任务的Windows服务或任务计划程序?,windows-services,windows-server-2003,Windows Services,Windows Server 2003,我有一个C#应用程序,它执行一些维护任务。它需要大约每小时运行一次,尽管如果有点不正常,这并不太重要。而且它必须在没有人登录的Win2003服务器上运行 基本上,我想知道我是否应该编写Windows服务,如果是,Thread.Sleep()是否是暂停线程一小时的正确方法,或者是否有更好的方法确保线程保持空闲并且不加载任何服务器?(又名:旋转锁的最反面是什么) 另一种选择是Windows任务计划程序,但我不确定这是否适合服务器使用,因为a)我必须将计划存储在其中,而不是我的app.config中,

我有一个C#应用程序,它执行一些维护任务。它需要大约每小时运行一次,尽管如果有点不正常,这并不太重要。而且它必须在没有人登录的Win2003服务器上运行

基本上,我想知道我是否应该编写Windows服务,如果是,Thread.Sleep()是否是暂停线程一小时的正确方法,或者是否有更好的方法确保线程保持空闲并且不加载任何服务器?(又名:旋转锁的最反面是什么)

另一种选择是Windows任务计划程序,但我不确定这是否适合服务器使用,因为a)我必须将计划存储在其中,而不是我的app.config中,b)我无法通过启动/停止/重新启动轻松控制服务;c)我不知道Windows用户的凭据是否与我在服务MMC管理单元中输入时一样安全


你的意见是什么?有一个空闲的服务是可能的还是好的,或者你会推荐任务调度器来代替它?

Windows服务更安全:没有人可以放弃它而工作。我发现Windows任务有很多问题(不执行…)


Windows任务计划程序用于最终用户任务,而不是应用程序任务。无论如何,Windows备份都会使用它;-)

我自己更喜欢任务调度器,因为如果需要,它更容易维护和更改计划


此外,如果开发人员“忘记”关闭连接、文件等操作,则持续运行和“睡眠”的实用程序有可能导致问题,这些操作可能会随着时间的推移而累积。让程序“运行并退出”是额外的安全措施。:-)

如果您选择服务路线,我建议您使用System.Threading.Timer。有了它,你可以设置它每小时触发一次事件。如果您认为需要更改间隔,可以在app.config中输入间隔

服务也在本地系统帐户下运行(默认情况下),而使用计划任务时必须提供用户名/密码。如果您使用用户名,则如果您更改密码而忘记更新任务,则会成为维护问题


我有一种情况,我实际上使用了两者的组合。这项服务白天不停地运行,但他们每晚都进行网络和数据库维护。因此,我使用两个预定任务。一个在午夜关闭服务,另一个在凌晨4点重新打开。这是通过使用NET STOP/NET START命令调用.BAT文件来实现的

你可能会发现这很有趣。与负责windows服务的工程师进行了良好的面谈,并讨论了何时选择服务或任务。简而言之,如果您的功能属于定期维护类别,请执行一项任务。

我认为windows服务可能更可靠,更易于监控,但它不会提供与开箱即用计划任务相同的计划灵活性。无论如何,我可能会选择这项服务,因为大多数enterprisey应用程序都倾向于作为服务运行,而不是计划任务


对于最近的项目,我曾经在windows服务中设置计划处理。其实设置起来并不难(很好的教程),CronTrigger只需一点点配置,就可以给您带来很大的灵活性。与原始的.NET计时器相比,我更喜欢它。

我想投入5美分,在任务未运行时使用任务调度器将节省一些内存