我想编写一个用户可以安排的 Windows 服务。即用户可以选择每天上午 9:00 到下午 6 点运行服务,也可以每天晚上运行,从晚上 12 点开始到第二天早上 6 点,等等。 box .NET API 可以帮助我做到这一点吗?我知道我可以使用计划任务来做到这一点,但是有没有办法以编程方式做到这一点?
5 回答
我使用Quartz.NET在 Windows 服务中执行计划任务取得了很好的效果。您可以做任何事情,从简单的间隔调度到 cron 样式的调度。
我的第一反应是质疑为什么要提供服务?但更重要的是,问题是为什么不使用操作系统提供的强大调度器呢?
也就是说,Windows 服务几乎只是您的应用程序在其中运行的一个线程。您可以将它分为两部分,第一部分是在计时器上执行的服务本身。服务的启动可以检查注册表值以确定它应该执行的频率。
该服务的第二部分将是一个小的 Windows 应用程序,它允许用户设置计划,当然,还可以将其写入前面提到的注册表值。
您不需要任何类型的特殊 API。
如果您不希望用户必须处理任务调度程序,那么您应该编写一个程序,让他们选择运行程序的日期和时间,然后您以编程方式为他们设置计划任务。这样他们就不必具体了解您正在运行的进程,也不必知道如何使用任务调度程序。他们只是从您的应用程序中完成所有操作。
如果您要安排它,只需构建一个控制台程序并向安装程序添加一些代码,以帮助用户在 Windows 中设置计划任务。
我实现了一些无人值守的服务(用 c# 编写的 Windows 服务),使用 crontab 算法来管理调度。该模式功能强大且灵活。我们可以在任何时间创建计划,只使用 cron 表达式。也许我错了,但我认为 cron 唯一没有涵盖的时间表是如果我们想要一个月的最后一天,但这从来都不是所有服务的要求。
我从互联网上的一篇文章(由 Atif Aziz 开源)中复制了 cron 算法,并在我的实用程序类中实现,多年来运行良好。
在我的博客中查看更多详细信息: CronTab 调度解析器算法
干杯!
罗伯托