c #windows服务还是只是普通程序?

时间:2011-03-30 16:17:49

标签: c# windows-services scheduled-tasks

  

可能重复:
  windows service vs scheduled task
  Windows Service Vs Simple Program

我正在尝试创建一个定期运行的程序(例如每5分钟运行一次),或让程序运行并让它在其中执行该功能(每5分钟一次)。

该程序是在数据库执行时从数据库中获取数据,然后将其写入(现在)说info.txt文件(此处不包含敏感内容)。每次写入文件时,都应覆盖文件中的现有信息。

该程序也应该在Windows启动时自动启动。 (因此无需登录机器并执行.exe [如果它是普通程序而非服务])

在它执行程序的时间段之间无关。

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

我希望我的问题很清楚。

3 个答案:

答案 0 :(得分:9)

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

您可以将任务设置为在特定用户帐户下运行,即使用户未登录也可以运行。有许多事件可以触发任务明星,如“Windows start”,“System Idle”......

其他优点是:如果发生崩溃,您可以将任务计划程序设置为向您发送电子邮件或以多种方式提醒您。您可以控制应用程序的“退出代码”,并向任务计划程序发出信号,告诉您该怎么做。

任务调度程序提供了许多正面功能,但没有多少人使用它们。

答案 1 :(得分:0)

我建议使用Windows服务。创建两者并比较资源使用情况可能是个好主意吗?

答案 2 :(得分:0)

我实际上建议根据您希望运行的任务的要求进行操作。我通常将计划服务的大多数功能构建到单个类库中,然后将其包装在控制台应用程序中以启动和调试。如果满意的话,我将它包装在Windows服务中并忘记它。

使用控制台应用程序的注意事项:

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

使用窗口服务的注意事项

  • 确保您接受过线程使用方面的培训。如果管理得当,Windows服务将使用更少的资源,但如果它对您来说是新的并且最终会在基于计时器的任务中泄漏内存,则可能会非常棘手。

..还有很多需要考虑的问题,但是编码是正确的,你可以先从一个开始,然后在你对它有信心时转到第二个。