我需要创建一个与任务调度程序一样工作的 Windows 服务,因为我可以配置它运行的时间,并且它基本上只是在该预定时间(重复)调用一个 .NET 类。推荐的方法是什么?此外,任何有关安装/删除该服务的信息将不胜感激!
更新:不能选择使用任务调度程序(客户要求,与他们的 IT 标准有关)。这也是我对他们的建议,但它不会奏效。
解决方案:感谢大家的回答,Quartz.Net 解决方案看起来特别好,但是我发现以下正是我需要的:
我需要创建一个与任务调度程序一样工作的 Windows 服务,因为我可以配置它运行的时间,并且它基本上只是在该预定时间(重复)调用一个 .NET 类。推荐的方法是什么?此外,任何有关安装/删除该服务的信息将不胜感激!
更新:不能选择使用任务调度程序(客户要求,与他们的 IT 标准有关)。这也是我对他们的建议,但它不会奏效。
解决方案:感谢大家的回答,Quartz.Net 解决方案看起来特别好,但是我发现以下正是我需要的:
您可以将Quartz.Net 调度程序嵌入到服务中。
如果您可以访问该框,为什么不使用 Windows 任务调度程序并从控制台 exe 调用功能。比重新发明轮子要容易得多。
我之前也遇到过同样的问题,任务调度器本身就有一点问题。它永远不能成为 linux cron 的可靠替代品。曾经我不得不编写一个服务来做到这一点。我System.Threading.Timer
在 1 秒的循环中运行。然后它根据我存储在 xml 文件中的配置检查需要触发的事件(外部 exe)。
您可以尝试 .NET 任务计划程序http://TaskService.Codeplex.com。该项目提供了安排 .NET 程序集在一天中的任何时间以不同类型的重复(如每天、每小时、每周、每 5 小时或每三天)运行的能力。
如果您正在创建一个调度系统,您最好编写一个 Windows 服务。尽管它们很难调试,但如果您将所有功能从服务中移出并放入帮助程序和服务代理类中,您可以轻松地测试功能而无需打扰服务。
然后,您可以通过 WCF 服务向前端公开您需要提供的任何信息。它们现在可以托管在任何可执行文件中,因此 Windows 服务可以正常工作。Windows 服务策略的优点是您不需要桌面。计划任务旨在(或应该)在后台运行。Windows 服务是处理后台任务的好方法。
我看过售后市场的第 3 方调度系统、开源调度程序和quartz.net。我们选择了后者。如果您的预算可以买单,请查看 JAMS 或其他调度系统。
哦,有这么多。
我将从 .Net 中的标准 Windows 服务开始,并使用 Properties\Settings 功能来存储我的预定时间(这实际上只适用于一次 - 多次需要更复杂的配置)。
我还将包含一个字符串来定义我想在该配置中运行的程序集/类,并确保程序集有一个从基类继承或实现接口的类,以便我可以将其加载为已知类型并执行一个称为 Execute() 之类的已知方法。
或者您也可以在配置文件中定义要调用的方法,并使用反射来调用该方法。
对不起,我的回复没有告诉你如何实现这一点。
为什么您的客户会禁止使用某些内置操作系统功能,同时允许运行它的本地克隆?
我认为尝试说服您的客户这是一个胡说八道的要求比将 Windows 调度程序重新创建为稳定的服务要少得多。除了通过使用现有的来节省时间之外,您最终可能会得到一个更好的解决方案。对每个人都是双赢的:)
最重要的是要意识到创建一个 Windows 服务是相当复杂的。在版本 6 和更高版本的产品上尤其如此,因为服务与桌面隔离。这里有一些评论
而不是服务,我会推荐一个“deamon”。这将是一个具有隐藏用户界面的小程序 - 就像任何其他应用程序一样在启动时运行它。它将在用户的上下文中运行,并且可以做用户可以做的任何事情(这可能是你想要的)。如果需要,您可以给它一个托盘图标,或者使用来自其他应用程序之一的信号让它显示其简单的 UI。