在.NET中编写计划的Windows服务

时间:2020-03-06 15:02:48  来源:igfitidea点击:

我想写一个Windows服务,用户可以安排。也就是说,用户可以选择每天从9:00 AM到下午6点运行服务,或者他可以从晚上12点开始到第二天早上6点,每晚运行。框.NET API可以帮助我做到这一点?我知道我可以使用计划任务来执行此操作,但是有什么方法可以通过编程方式执行此操作吗?

解决方案

如果要计划它,只需构建一个控制台程序,然后向安装程序中添加一些代码即可帮助用户在Windows中设置计划的任务。

我的第一反应是质疑为什么要提供服务?但更重要的是,问题是为什么不使用操作系统提供的功能强大的调度程序?

也就是说,Windows服务几乎只是应用程序在其中运行的线程。我们可以将其分为两部分进行交付,第一部分是在计时器上执行的服务本身。服务的启动可以检查注册表值,以确定应该执行的频率。

该服务的第二部分将是一个小的Windows应用程序,该应用程序允许用户设置日程安排,当然,还可以将其写入到前面提到的注册表值中。

我们不需要任何特殊的API。

使用Quartz.NET在Windows服务中执行计划的任务,我取得了良好的效果。我们可以执行所有操作,从简单的时间间隔计划到cron样式的计划。

如果我们不希望用户必须处理任务计划程序,则应编写一个程序,让他们选择运行该程序的日期和时间,然后以编程方式为他们设置计划的任务。这样,他们不必专门了解我们正在运行的进程,也不必知道如何使用任务计划程序。他们只是通过应用程序完成所有操作。

我使用crontab算法来管理调度,从而实现了一些无人值守的服务(用c#编写的Windows服务)。该模式功能强大且灵活。我们可以仅使用cron表达式来创建所需的时间表。也许我错了,但是我认为cron唯一无法涵盖的时间表是我们是否需要每月的最后一天,但这并不是所有服务的必要条件。

我从Internet上的一篇文章(由Atif Aziz开源)中复制了cron算法,并在我的实用程序类中实现了好多年。

在我的博客中查看更多详细信息:
CronTab时间表解析器算法

干杯!

罗伯托