我需要创建一个与任务调度程序一样工作的Windows服务,因为我可以配置它运行的时间,它基本上只是在该预定时间调用.NET类(重复出现)。建议的方法是什么?此外,任何有关安装/删除该服务的信息都将受到赞赏!
更新:使用任务计划程序不是一个选项(客户要求,与其IT标准有关)。这也是我对他们的建议,但它不起作用。
解决方案:感谢大家的回答,Quartz.Net解决方案看起来特别好看,但我发现以下内容正是我所需要的:
答案 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及更高版本的产品中尤其如此,因为服务是从桌面隔离的。以下是一些评论
而不是服务,我会推荐一个“deamon”。这将是一个具有隐藏用户界面的小程序 - 只需在启动时运行它就像任何其他应用程序一样。它将在用户的上下文中运行,并且可以执行用户可以执行的任何操作(这可能是您想要的)。如果需要,您可以给它一个托盘图标,或者使用来自其他应用程序的信号让它显示其简单的用户界面。