Windows事件调度程序自定义服务

时间:2008-12-22 22:07:59

标签: .net windows-services scheduled-tasks

我需要创建一个与任务调度程序一样工作的Windows服务,因为我可以配置它运行的时间,它基本上只是在该预定时间调用.NET类(重复出现)。建议的方法是什么?此外,任何有关安装/删除该服务的信息都将受到赞赏!

更新:使用任务计划程序不是一个选项(客户要求,与其IT标准有关)。这也是我对他们的建议,但它不起作用。

解决方案:感谢大家的回答,Quartz.Net解决方案看起来特别好看,但我发现以下内容正是我所需要的:

http://www.c-sharpcorner.com/UploadFile/ajifocus/AppScheduler05262006074807AM/AppScheduler.aspx?ArticleID=b52f76da-943f-4807-9675-869f135ef2cd

8 个答案:

答案 0 :(得分:9)

您可以将Quartz.Net scheduler嵌入到服务中。

答案 1 :(得分:2)

如果您可以访问该框,为什么不使用Windows任务调度程序并从控制台exe调用功能。比重新发明轮子更容易。

答案 2 :(得分:1)

之前我遇到过同样的问题,任务调度程序本身就有点问题。它永远不可能是linux的cron的可靠替代品。一旦我不得不写一项服务来做到这一点。我在1秒的循环中运行System.Threading.Timer。然后它根据我存储在xml文件中的配置检查需要触发的事件(外部exe)。

答案 3 :(得分:1)

您可以尝试.NET任务计划程序http://TaskService.Codeplex.com。该项目提供了安排.NET程序集在一天中的任何时间运行的能力,具有不同类型的重复,如每日,每小时,每周,每5小时或每隔三天。

答案 4 :(得分:1)

如果要创建一个调度系统,那么编写Windows服务会好得多。即使它们很难调试,如果您将所有功能从服务中移出并进入帮助程序和服务代理程序类,您可以轻松地测试功能而无需担心服务。

然后,您可以通过WCF服务公开您需要提供给前端的任何信息。它们现在可以托管在任何可执行文件中,因此Windows服务工作正常。 Windows服务策略的优势在于您不需要桌面。计划任务是(或应该)在后台运行。 Windows服务是后台任务的好方法。

我查看了售后市场第三方调度系统,开放式源调度程序和quartz.net。我们选择了后者。如果您的预算可以买单,请查看JAMS等安排系统。

答案 5 :(得分:0)

哦,有这么多。

我从.Net中的标准Windows服务开始,并使用Properties \ Settings功能来存储我的预定时间(这实际上只能用一次 - 一次以上需要更复杂的配置)

我还要包含一个字符串来定义我想在该配置中运行的程序集/类,并确保程序集有一个继承自基类或实现接口的类,因此我可以将其加载为已知类型并执行一个名为Execute()的已知方法。

或者您也可以在配置文件中定义要调用的方法,并使用反射来调用该方法。

答案 6 :(得分:0)

对不起,我的回复没有告诉你如何实现这个。

为什么您的客户会禁止使用某些内置操作系统功能,同时允许运行本土的克隆?

我认为,尝试说服您的客户这是一个废话要求,而不是将Windows调度程序重新创建为稳定的服务,这样做的工作量会减少。除了通过使用现有的方式节省时间之外,您可能最终会得到更好的解决方案。对每个人来说都是双赢的:)

答案 7 :(得分:-2)

最重要的是要意识到创建一个Windows服务是非常复杂的。在版本6及更高版本的产品中尤其如此,因为服务是从桌面隔离的。以下是一些评论

  • 服务比基本用户模式程序更难调试。
  • 服务无法与V6及更高版本操作系统上的用户交互。所以你不能给他们一个控制台或让他们直接弹出消息框。
  • 通常通过远程过程调用或进程外COM来完成与服务的通信。即使对于看似竞争对手的事情,两者都可能很复杂。
  • 服务运行必不可少的热情,因此它们必须比其他可执行文件更加可靠和高效。
  • 根据安全上下文,可能很难获得服务以导致系统中发生其他事情。

而不是服务,我会推荐一个“deamon”。这将是一个具有隐藏用户界面的小程序 - 只需在启动时运行它就像任何其他应用程序一样。它将在用户的上下文中运行,并且可以执行用户可以执行的任何操作(这可能是您想要的)。如果需要,您可以给它一个托盘图标,或者使用来自其他应用程序的信号让它显示其简单的用户界面。