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

c#windows服务还是普通程序?,c#,windows-services,scheduled-tasks,C#,Windows Services,Scheduled Tasks,可能的重复项: 我试图创建一个定期运行的程序(比如每5分钟一次),或者让程序运行并让它执行其中的函数(每5分钟一次) 该程序在执行时从数据库中获取数据,然后将其写入(目前)say info.txt文件(此处不包含敏感内容)。每次写入文件时,都应覆盖文件中的现有信息 该程序也应在windows启动时自动启动。(因此无需登录计算机并执行.exe[如果它是普通程序而不是服务]) 在它执行程序的两个周期之间,程序将没有任何作用 因此,我应该将此程序作为Windows服务运行,还是应该使用任务计划程序

可能的重复项:

我试图创建一个定期运行的程序(比如每5分钟一次),或者让程序运行并让它执行其中的函数(每5分钟一次)

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

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

在它执行程序的两个周期之间,程序将没有任何作用

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


我希望我的问题足够清楚。

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

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

另一个优点是:如果某个程序崩溃,您可以设置TaskScheduler向您发送电子邮件或以多种方式向您发出警报。您可以控制应用程序的“退出代码”,并向任务调度器发送信号,告知正在进行的操作和要执行的操作


TaskScheduler提供了许多积极的特性,但使用它们的人并不多

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

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

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

  • 如果可能的话,请确保在系统帐户下运行它,或者您可以在计划程序中的“运行方式”下输入特定的登录名。这将确保不需要交互式登录
  • 如果有两个实例同时运行是一个问题,请确保您清楚地命名它,并检查是否有一个实例在主方法中运行,如果是,请退出。windows服务将避免此问题
使用窗口服务的注意事项

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

有很多要考虑的事情,但是代码正确,你可以从一个开始,当你对它有信心的时候移动到第二。< / P >你的目标是什么?我怀疑任务计划程序是否可以在没有交互式用户登录的情况下启动程序。@克里斯:您可以告诉任务计划程序在您为该任务指定的帐户下启动某些应用程序。关于这个主题,这里还有另一个好的线索:目标平台是什么?实际过程需要多长时间?请注意,任务计划程序将每5分钟运行一次(但是,如果另一个实例已在运行,您可以将其配置为不运行)。在Windows服务方法中,您可以在上一次运行完成后“安排”5分钟的间隔。@HABJAN,您是对的,谢谢您提供的信息。我想问题仍然存在,任务调度器是否可以在windows启动后以指定的登录名运行应用程序。使用任务调度器的最大优点是,已编写/测试了调度代码。如果你改变了你的计划,没什么大不了的,只要在任务的配置中改变它。@RQDQ:是的,这就是重点+1用于任务计划程序。通过将一个简单的应用程序变成一个服务,你可能会给它增加比你需要的更多的复杂性。