2009-01-26 166 views
6

我有一个C#应用程序来完成一些维护任务。它需要大致每小时运行一次,尽管如果有点关闭它并不重要。而且它有一个Win2003的服务器没有人登录上运行。Windows服务或任务计划程序的维护任务?

基本上,我不知道是否我应该写一个Windows服务,如果是,如果Thread.sleep()方法是暂停一个线程有道小时,还是有更好的方法确保线程保持空闲状态并且不会造成任何服务器负载? (又名Spinlock最相反的东西)

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

您的意见是什么?拥有闲置的服务是否可行?或者您会推荐任务调度程序吗?

回答

7

您可能感兴趣的这个video。与负责Windows服务的工程师进行良好的访谈,并进入何时选择服务或任务。简而言之,如果您的功能属于定期维护类别,请执行任务。

0

Windows服务更安全:没有人可以放弃它,并且有效。我发现Windows Tasks有很多麻烦(不执行,...)。

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

5

我更喜欢我自己的任务计划程序,因为它更容易维护和更改计划,如果您需要。

此外,如果开发人员“忘记”执行关闭连接,文件等随着时间的推移可能会建立起来的事情,那么持续运行和“睡眠”的实用程序会带来问题风险。 “运行和退出”程序是一个额外的安全毯。 :-)

1

如果你去的服务路线,那么我会建议使用System.Threading.Timer。有了这个,你可以设置它每小时发射一次事件。如果你认为你需要改变它,你可以把时间间隔放在app.config中。

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

我有一种情况,我实际上使用了两者的组合。该服务在白天不断运行,但他们每晚都会进行网络和数据库维护。所以,我使用了两个计划任务。一个在午夜关闭服务,一个在凌晨4点恢复服务。这是通过使用NET STOP/NET START命令调用.BAT文件完成的。

1

我认为一个windows服务可能更可靠,更容易监控,但它不会提供与开箱即用的计划任务相同的调度灵活性。无论如何,我可能会使用该服务,因为大多数企业应用程序倾向于作为服务运行,而不是计划任务。

对于最近的项目,我使用Quartz.NET在Windows服务中设置预定处理。实际上,设置并不困难(很好的教程),并且CronTrigger只需一点点配置即可为您提供很大的灵活性。我比原始的.NET定时器更喜欢它。

1

我想扔我的5美分价值,使用任务计划程序将节省一些内存,当你的任务没有运行。