2011-03-30 22 views
7

可能重复:
windows service vs scheduled task
Windows Service Vs Simple Programc#windows服务或只是正常的程序?

我试图创建一个定期运行的程序(比如每5分钟),或具有程序运行,并将它执行其中的功能(每5分钟)。

该程序是从数据库中获取数据,当它被执行,然后写入(现在)说info.txt文件(这里没有敏感的东西)。每次写入文件时,它都应该覆盖文件中的现有信息。

程序也应该在Windows启动时自动启动。 (因此不需要在机器上登录并执行.exe [如果它是一个正常的程序而不是服务])

在它执行程序的时段之间没有任何关系。

因此,我应该将此程序作为Windows服务运行,还是应该使用任务计划程序定期启动程序来执行此操作? 我的目标是让这个程序尽可能流畅地运行而不会堵塞资源。 (例如,它不应该超过CPU的5%)

我希望我的问题已经够清楚了。

+0

你定位的操作系统是什么?我怀疑Task Scheduler是否可以在没有交互式用户登录的情况下启动程序。 – 2011-03-30 16:20:30

+1

@Chris:您可以告诉任务计划程序在您为该任务指定的帐户下启动某个应用程序 – HABJAN 2011-03-30 16:21:25

+0

什么是目标平台?实际过程需要多长时间?请注意,任务计划程序将每5分钟运行一次(但是,如果另一个实例已在运行,则可以将其配置为不运行)。在Windows服务方法中,可以在上一次运行完成后的5分钟时间间隔内“计划”。 – gooch 2011-03-30 16:23:34

回答

9

我会去与任务调度程序触发的应用程序。唯一需要担心的是运行应用程序的单个实例。

您可以将任务设置为在特定用户帐户下运行,即使用户未登录也可以运行该任务。有一些事件可以触发任务明星,如“Windows启动”,“系统空闲”...

其他好处是:如果有事故,您可以设置任务计划程序向您发送电子邮件或提醒您方法。您可以控制应用程序的“退出代码”并向任务调度程序发出信号以及执行的操作。

有许多积极的功能,任务调度程序提供,但没有很多人使用它们。

+1

使用任务计划程序的最大优点是调度代码已被写入/测试。如果您改变想法如何安排它,没有什么大不了的 - 只需在任务配置中进行更改即可。 – RQDQ 2011-03-30 16:45:27

+0

@RQDQ:是的,这就是要点! – HABJAN 2011-03-30 16:49:00

+0

+1任务调度程序。您可能会增加一个简单的应用程序的复杂性,而不是通过将其变成服务。 – 2011-03-30 17:04:08

0

我会为此建议一个Windows服务。无论如何,创建两者并比较资源使用情况可能是一个好主意?

0

我实际上会建议两者都取决于您希望运行的任务的要求。我通常将定时服务的大部分功能构建到单个类库中,然后将其包装在控制台应用程序中以开始调试。当满意时,我把它包装在一个windows服务中,并忘记它。使用一个控制台应用程序的

注意事项:

  • 确保您如果有可能运行在系统帐户,也可以放在一个特定的登录润下,如调度。这将确保不需要交互式登录。
  • 如果同时运行它的两个实例是一个问题,请确保清楚地命名它,并检查它在main方法中运行的实例,如果它存在,请退出。一个Windows服务将避免这个问题。

考虑使用窗口服务

  • 确保您的教育关于线程使用的。如果管理得当,Windows服务将使用较少的资源,但如果它对您而言是新手而且在基于计时器的任务中泄漏内存,则可能会非常棘手。

..还有很多需要考虑的事情,但是要正确地编写代码,您可以从一个开始,在您对此充满信心时移动到第二个。