19

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

4

10 回答 10

21

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

  • windows任务调度器比你自制的调度器效率更高
  • Windows 任务计划程序提供了许多您几乎肯定不会尝试复制的选项,但稍后可能会发现它们很有用
  • 如果您构建一个服务,如果您想更改确定在什么条件下运行任务的逻辑,则必须重新编译程序。如果您使用调度程序,您只需翻转一些选项并完成它。

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

于 2009-04-20T09:23:02.237 回答
13

取决于您需要它运行的规律性。

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

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

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

于 2009-04-20T09:08:37.713 回答
7

从控制台应用程序开始。将位于循环-进程-睡眠循环内的逻辑分开,然后您实际上可以轻松地在它们之间切换 - 即使在同一个 EXE 中也是如此。

我已经做到了。我们可以调用:

ourservice.exe - 控制台

它会运行。或者

ourservice.exe -安装

它将作为服务安装:)

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

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

于 2009-04-20T10:58:53.613 回答
3

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

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

于 2009-04-20T09:16:59.160 回答
2

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

于 2009-04-20T10:35:47.740 回答
2

避免使用服务,除非您必须使用它。

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

我个人认为其他人在我的计算机上 24/7 全天候执行他们的进程是很侮辱的,而这是完全没有必要的。他们用完了我的表现。我禁用了所有不必要的后台服务。

于 2009-04-20T10:43:13.603 回答
2

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

而@Tom,他关于必须保持登录到计算机才能运行计划任务的说法是错误的。我刚刚测试了自己,并确认即使您没有登录,Windows 计划任务仍然会运行(当然,除非您选择任务仅在您登录时运行的选项)。

于 2009-10-21T20:29:15.990 回答
1

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

我想说任务运行得越频繁,Windows 服务就越受欢迎。

于 2009-04-20T09:09:36.277 回答
1

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

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

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

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

时间表也是一个问题。计划任务的最短计划是一分钟。低于此值的任何内容,您要么需要使用 Windows 服务,要么在您的工作中构建一个循环。

于 2009-04-20T09:11:43.853 回答
1

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

于 2009-06-18T18:45:39.070 回答