【发布时间】:2010-10-20 12:43:27
【问题描述】:
如果我们需要编写一个定期运行的程序,我们更喜欢哪种方式? 编写 Windows 服务或编写作为计划任务工作的控制台应用程序?
【问题讨论】:
标签: windows-services scheduled-tasks
如果我们需要编写一个定期运行的程序,我们更喜欢哪种方式? 编写 Windows 服务或编写作为计划任务工作的控制台应用程序?
【问题讨论】:
标签: windows-services scheduled-tasks
如果可以,我建议将进程作为计划任务运行,并且仅在需要时编写服务。服务编写起来要困难得多(正确地),如果您按照任何类型的计划运行进程,那么使用 Windows 调度器比尝试构建自己的调度器要好得多(在服务)。
如果您要在两者之间做出选择,那么显然使用任务计划程序是一个可行的选择。如果使用 Task Scheduler 是一个可行的选择,那么构建服务几乎肯定是错误的选择。
【讨论】:
取决于您需要它运行的规律性。
如果它需要每天每 60 秒运行一次,我会选择 Windows 服务。
如果它每天只需要运行一次,我会选择计划任务
中间的任何东西...使用你的判断:)
【讨论】:
从控制台应用开始。将位于循环-处理-睡眠循环中的逻辑分开,然后您实际上可以轻松地在它们之间切换 - 即使在同一个 EXE 中也是如此。
我已经做到了。我们可以调用:
ourservice.exe -控制台
它会运行。或者
ourservice.exe -安装
它会作为服务安装:)
在 99% 的情况下,我会执行计划任务。如果您需要一直运行,请侦听端口,查看文件夹(也许 - 可以每 10 秒执行一次,没有问题):然后在服务中执行。如果您所做的只是唤醒,请进行一些处理(或不进行),然后重新进入睡眠状态:使用调度程序。它更容易、更干净(内存管理,特别是如果您使用 COM 对象,如果您使用 MAPI 则真的),并且使用 MS 调度程序的选项(每周,但不是在星期二下午 5 点)比您在时间.....这不是时间,因为它已经存在并且是免费的
哦,调试控制台应用程序(调度程序)比调试服务更容易...... :) 或者让某人“运行它”。
【讨论】:
如果它真的是“定期”,那么我会选择计划任务。这些可以设置为以任何所需的频率运行。
服务(根据我的经验)更多地用于必须响应本质上是随机事件的程序,例如通过 FTP 到达的文件,或者必须监视文件系统或数据库状态的程序。
【讨论】:
如果您希望定期运行某些内容,也可以查看quartz.net。它是一个预构建的框架,可让您安排任务并节省您自己编写服务部分的时间。
【讨论】:
good patterns and practices 使用 quartz ?
避免使用一项服务,除非你必须使用它。
这是一个过程 - 这意味着它一直在运行。无故使用系统资源是不好的做法。
我个人认为,其他人在我的计算机上 24/7 全天候执行他们的进程,而这是完全没有必要的。他们用完了我的表现。我禁用了所有不必要的后台服务。
【讨论】:
如果您想使用 WCF 或 .NET Remoting 并让客户端应用程序与某些主机服务通信,我认为服务可能会很有用;否则我同意,如果更复杂的服务没有添加任何新内容,则计划任务比服务更可取。
还有@Tom,他关于必须保持登录到计算机才能运行计划任务的说法是错误的。我刚刚测试了自己,并确认即使您没有登录,Windows 计划任务仍然会运行(当然,除非您选择任务仅在您登录时运行的选项)。
【讨论】:
这取决于您所说的定期是什么意思?每一秒、每一分钟、每一小时、每一天?
我会说任务运行得越频繁,Windows 服务就越受欢迎。
【讨论】:
“视情况而定”,但为了简单起见,我通常更喜欢计划任务:
如果这或多或少是一次性的,并且您将自己安装和控制,那么计划任务可能是个好主意。
对于应该具有成品感觉并且客户应该自己安装的东西,我会选择 Windows 服务。
而且时间表也是一个问题。计划任务的最短计划是一分钟。低于此值的任何内容,您都需要使用 Windows 服务,或者在您的工作中构建一个循环。
【讨论】:
我认为这还取决于您是否可以让计算机保持登录状态。我发现除非设置任务的人登录,否则 Windows 计划任务无法运行。如果计算机无法保持登录状态,则程序必须作为服务计划任务运行。
【讨论】: