【问题标题】:Windows Service or Scheduled Task, which one do we prefer?Windows 服务或计划任务,我们更喜欢哪一个?
【发布时间】:2010-10-20 12:43:27
【问题描述】:

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

【问题讨论】:

    标签: windows-services scheduled-tasks


    【解决方案1】:

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

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

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

    【讨论】:

    • 但是如何防止计划任务与桌面交互呢?我从来不知道如何在后台运行,而且每五​​分钟就会弹出很多控制台窗口(甚至是最小化),这很烦人。
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      ourservice.exe -控制台

      它会运行。或者

      ourservice.exe -安装

      它会作为服务安装:)

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          如果您希望定期运行某些内容,也可以查看quartz.net。它是一个预构建的框架,可让您安排任务并节省您自己编写服务部分的时间。

          【讨论】:

          • 完整的真实世界样本,good patterns and practices 使用 quartz ?
          【解决方案6】:

          避免使用一项服务,除非你必须使用它。

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

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

          【讨论】:

            【解决方案7】:

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

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

            【讨论】:

              【解决方案8】:

              这取决于您所说的定期是什么意思?每一秒、每一分钟、每一小时、每一天?

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

              【讨论】:

                【解决方案9】:

                “视情况而定”,但为了简单起见,我通常更喜欢计划任务:

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

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

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

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

                【讨论】:

                • 我不会考虑在你的工作中建立一个循环来实现低于每分钟频率的可行选择 - 如果你在这一点上,只需使用 Windows 服务
                【解决方案10】:

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2011-02-18
                  • 2016-02-10
                  • 2010-09-28
                  • 2018-04-04
                  • 1970-01-01
                  • 2010-11-28
                  相关资源
                  最近更新 更多