【问题标题】:what are the differences between having a .EXE file which is scheduled using Windows Task Scheduler and between having Windows service拥有使用 Windows 任务计划程序计划的 .EXE 文件与拥有 Windows 服务之间有什么区别
【发布时间】:2017-05-02 14:05:19
【问题描述】:

我知道创建 Windows 服务允许我们运行后台作业而无需登录机器。而.exe文件可以在用户登录PC并点击.exe文件时运行(需要用户登录)。

但现在假设我创建了一个.exe 文件并使用 Windows 任务计划程序安排它运行。即使用户没有登录,我也可以指定运行任务。所以在这种情况下,真正的区别是什么:-

  1. 有一个.exe 计划使用任务调度程序运行?
  2. 在拥有 Windows 服务之间?

谢谢

【问题讨论】:

  • 服务例如连续运行,而计划任务以指定的时间间隔运行。
  • 如果你可以用任务调度器做你想做的事,那就去做吧。
  • @Evk 那么还有哪些只能在 .exe 或 Windows 服务上找到的东西??
  • @Ben 你能解释一下为什么吗? .exe 将提供哪些 Windows 服务不能提供的内容,反之亦然??
  • 我建议使用计划任务,或者如果文件夹在 SQL Server 上,您可以使用 SQLAgent 作业。由于这是服务器的事情,电池使用不是问题,所以每分钟检查一次作业就可以了。

标签: c# windows windows-services


【解决方案1】:

任务计划程序通常适用于执行定期或偶尔任务的进程,从每分钟一次到“登录时”或“每年一次”。它们也可以有效地连续运行,但这确实是对系统的滥用。

任务计划程序还可以在登录用户的上下文中运行进程,并且这些进程可以与用户交互。

服务通常适用于持续运行的进程,例如为设备提供服务或提供网络服务的进程。

服务通常不能直接与用户交互。在他们需要这样做的地方,通常有一个用户程序通过某种 RPC 与服务通信,例如 DCOM、MSRPC 或其他东西。

实际上没有什么是服务可以做的,而由任务计划程序启动的程序却不能,反之亦然:这些功能取决于程序运行时的登录身份,而不是它们的启动方式。

总结:

  • 如果您想要一个为网络提供服务的连续过程,您可能需要一个服务。
  • 如果进程启动缓慢,但运行后继续运行成本低廉,您可能需要一项服务。
  • 如果您想执行任何类型的定期任务,您可能需要一个计划任务。
  • 如果进程消耗大量 CPU 或磁盘资源或占用大量资源,您可能需要重写它以使其不再需要。

【讨论】:

  • 感谢您的信息。但是让我重新提出我的问题......现在,如果我们想比较它们的内部生命周期,那么这两种方法之间有什么区别吗?我理解事情的方式如下:-当我(或任务调度程序)执行.exe时,.exe将开始执行直到结束,.exe文件一旦完成执行将不再处于活动状态.. ..但在windows服务案例中,一旦windows服务启动,它将继续执行,直到我们关闭显示整个PC?或者情况并非如此??
  • 服务可以选择随时停止,也可以由服务控制管理器请求停止。
  • 所以主要是这两种方法的生命周期几乎相同?
【解决方案2】:

只要您的软件正确地做它必须做的事情,就不会有任何差异。这完全取决于您想为您的开发提供什么方法​​。我通常会尝试在这种解决方案中使用尽可能少的组件,以便更轻松地进行故障排除和维护。例如,如果您安装 .exe 并将其配置为计划任务,则无论何时失败,您不仅要检查软件固有的内容,还要检查计划任务中涉及的所有内容(用户、计划、触发器、服务),并且您并不总是能够控制它,因为您的应用程序可能安装在您没有完全权利做您想做的事情的服务器上。

另外,考虑到每个计划任务都依赖于Task Scheduler,它本身就是一个服务。

所以继续:恕我直言,创建作业的优点是避免重新创建所有计划触发的逻辑,如果您以前没有这样做过,可能会令人头疼。重新发明轮子也不是更好。另一方面,如果您有一些明确的任务可以通过 Timer 完成,那么创建 Windows 服务可能是一个更好的选择。

【讨论】:

  • 我的问题的目的是确切地知道这两种方法之间的区别。在开始判断哪种方法更好,更容易开发和维护之前......似乎这两种方法在某种程度上是相似的。 .关于即使用户没有登录也可以运行...并且两者都可以手动启动并且都可以在特定用户帐户下运行...
  • @johnG 查看您的 cmets 我可以看到您需要在特定目录中查找 CSV 文件。我做过几个这样的项目。恕我直言,在这种情况下最好的办法是拥有一个计时器并在文件夹中查找文件,或者只是创建一个 FileSystemWatcher 以了解是否某些文件已移动到该位置,然后触发您的逻辑。
  • 所以在我看来这两种方法有点相似,但如果我选择使用使用任务计划程序安排的 .exe,那么我将添加对我的应用程序(即任务计划程序本身)的额外依赖。 .虽然在windows服务中它将是独立的,它会知道它什么时候应该开始工作而不需要额外的组件......这是正确的吗?第二个问题,如果我们比较它们的生命周期,它们是否也有相似的生命周期?
【解决方案3】:

我想在这里补充一点,Windows 服务(计划任务)部署在开发人员手中。开发人员可以编写代码在任何时间点更改流程执行时间。

另一方面,通过“任务调度程序”运行的进程取决于服务器管理员。开发人员必须指导管理员必须运行什么时间调度程序。
如果有任何要求在某个不规则的时间运行该进程,他们必须联系服务器管理员,要么暂时手动运行 .EXE,要么更改调度程序时间。
其他情况下admin只需要重启服务,时间就不用管了!!!

【讨论】:

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