Windows服务或计划任务,我们更喜欢哪一个?

时间:2009-04-20 09:05:38

标签: windows-services scheduled-tasks

如果我们需要编写一个定期运行的程序,我们更喜欢哪种方式? 编写Windows服务或编写一个按计划任务工作的控制台应用程序?

10 个答案:

答案 0 :(得分:21)

如果可以的话,我建议将该过程作为计划任务运行,并且只在需要时编写服务。服务(正确地)编写起来要困难得多,如果你按照任何类型的时间表运行你的进程,那么使用Windows调度程序比尝试构建自己的调度程序要好得多(在servce)。

  • Windows任务调度程序比您的自制调度程序更有效
  • Windows任务计划程序提供了许多选项,您几乎肯定不会尝试复制这些选项,但稍后可能会发现有用的选项
  • 如果要构建服务,如果要更改确定运行任务的条件的逻辑,则必须重新编译该程序。如果您使用调度程序,只需翻转一些选项即可完成。

如果您正在尝试在两者之间做出决定,那么显然使用任务计划程序是一个可行的选择。如果使用任务计划程序是一个可行的选择,那么构建服务几乎肯定是错误的选择。

答案 1 :(得分:13)

取决于您需要经常运行的程度。

如果它需要整天每60秒运行一次,我会使用Windows服务。

如果它只需要每天运行一次,我会选择计划任务

中间的任何东西......使用你的判断:)

答案 2 :(得分:7)

从控制台应用开始。分离出位于循环过程睡眠循环中的逻辑,然后你可以轻松地在它们之间切换 - 即使在同一个EXE中也是如此。

我做到了这一点。我们可以打电话:

ourservice.exe -console

然后就跑了。或

ourservice.exe -install

它将作为服务安装:)

我会在99%的情况下进行预定任务。如果你需要一直运行,请监听端口,观看文件夹(可能 - 可以每10秒完成一次没有问题):然后在服务中执行。如果你所做的只是唤醒,做一些处理(或不处理),然后再回到睡眠状态:使用调度程序。它更容易,更清晰(内存管理,尤其是如果你使用COM对象,如果你使用MAPI则是真的),并且使用MS调度程序的选项(每周,但不是在周二下午5点)比你在时间.....这是没有时间,因为它已经存在并且是免费的

哦,调试控制台应用程序(调度程序)比服务更容易.... :)或者让某人“只是运行它”。

答案 3 :(得分:2)

如果确实是“定期”,那么我会选择预定任务。这些可以设置为以任何所需的频率运行。

对于必须响应基本随机事件的程序(例如通过FTP到达的文件,或者必须监视文件系统或数据库状态的程序),服务(根据我的经验)更多。

答案 4 :(得分:2)

如果您想要定期运行某些内容,请查看quartz.net。它是一个预先构建的框架,允许您安排任务并节省您自己编写服务部分的费用。

答案 5 :(得分:2)

除非您必须使用它,否则请避免使用它。

这是一个过程 - 这意味着它一直运行 。有意使用系统资源是不好的做法。

我个人觉得侮辱其他人在我的计算机上全天候执行他们的流程是完全没必要的。这是他们用完的表现。我禁用所有不必要的后台服务。

答案 6 :(得分:2)

如果您想使用WCF或.NET Remoting并让客户端应用程序与某些主机服务进行通信,我认为服务可能很有用;否则我同意,如果更复杂的服务没有增加任何新内容,则计划任务优于服务。

而@Tom,他关于必须保持登录计算机以执行计划任务的声明是错误的。我刚刚测试了自己,并确认即使您没有登录,Windows计划任务仍将运行(除非您选择该任务仅在您登录时运行)。

答案 7 :(得分:1)

这取决于你定期的意思?每一秒,每一分钟,每一小时,每一天?

我想说,运行任务的频率越高,首选Windows服务就越多。

答案 8 :(得分:1)

“这取决于”,但为了简单起见,我通常更喜欢预定的任务:

  • 您无需为程序添加任何样板服务代码。
  • 您的程序可以从命令行运行以进行故障排除(您必须在服务程序中使用命令行开关来完成此操作)。

如果这或多或少是一次性的,并且您将自己安装和控制某些事情,那么计划任务可能是一个好主意。

对于应该有成品感觉的东西,并且客户应该自己安装,我会使用Windows服务。

时间表也是一个问题。计划任务的最短时间表是一分钟。无论如何,你要么需要使用Windows服务,要么在你的工作中建立一个循环。

答案 9 :(得分:1)

我认为这还取决于您是否可以让计算机登录。我发现除非设置任务的人员已登录,否则无法运行Windows计划任务。如果计算机无法保持登录状态,则该程序必须作为服务副计划任务运行。