【问题标题】:Which is better, a scheduled task or windows service? [closed]计划任务或 Windows 服务哪个更好? [关闭]
【发布时间】:2017-12-06 16:00:07
【问题描述】:

我创建了一个控制台程序,将数据从数据库传输到服务器。该程序必须每天在特定时间运行。起初我想到了一个定时任务,但问题是它取决于用户是否登录。但是由于它比较棘手并且服务必须每天运行,所以我通过研究来到了Windows服务。

但是,大部分信息来自 2009 年和 2010 年,可能已经过时了?我还找到了解释如何创建计划服务的指南:

https://www.aspsnippets.com/Articles/Simple-Windows-Service-that-runs-periodically-and-once-a-day-at-specific-time-using-C-and-VBNet.aspx

这样做仍然是最佳做法吗?你会推荐什么?

【问题讨论】:

  • 为什么你认为计划任务只能在用户登录时运行?这仅对与 UI 交互的事物是必需的,但如果您将其作为服务,您将无法与 UI 交互。
  • 你的悬空分词正在显示。您是说您的程序需要用户登录还是计划任务需要用户登录?后者不是真的。如果您在谈论前者,我看不出服务如何解决问题。 @ScottChamberlain 秒杀我!
  • 它以什么方式依赖于登录?您可以将计划任务配置为在特定用户下运行吗?
  • 仅供参考,您链接到的指南让您了解如何在服务中实现此功能,但请注意代码存在不少质量问题。在任何情况下,您都可以执行计划任务或 Windows 服务。我想哪个“更好”是一个见仁见智的问题,这就是为什么我投票决定以基于意见的方式结束它。
  • @ScottChamberlain 我们过去在运行此类任务的服务器上遇到过问题。如果所有用户都注销了任务没有启动。来源:*.com/questions/507674/… 引用“即使用户未登录 PC,Windows 服务也会运行”

标签: c# service scheduled-tasks


【解决方案1】:

您的第一个想法是正确的,使用计划任务并选择“无论用户是否登录都运行”。

如果您使用 Windows 服务,您必须自己编写触发器,这可能会出错。

如果您想要更“企业”的东西,我建议您查看 Quartz.NET。它是一个开源调度库,尽管对于您想要实现的目标来说它可能有点矫枉过正。

【讨论】:

  • 然后我将创建一个计划任务。谢谢。 :)