2

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

更新:不能选择使用任务调度程序(客户要求,与他们的 IT 标准有关)。这也是我对他们的建议,但它不会奏效。

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

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

4

8 回答 8

9

您可以将Quartz.Net 调度程序嵌入到服务中。

于 2008-12-25T04:56:03.217 回答
2

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

于 2008-12-22T23:02:50.420 回答
1

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

于 2008-12-25T04:35:07.453 回答
1

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

于 2009-04-09T17:59:24.960 回答
1

如果您正在创建一个调度系统,您最好编写一个 Windows 服务。尽管它们很难调试,但如果您将所有功能从服务中移出并放入帮助程序和服务代理类中,您可以轻松地测试功能而无需打扰服务。

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

我看过售后市场的第 3 方调度系统、开源调度程序和quartz.net。我们选择了后者。如果您的预算可以买单,请查看 JAMS 或其他调度系统。

于 2009-12-14T00:52:46.850 回答
0

哦,有这么多。

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

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

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

于 2008-12-22T22:19:44.437 回答
0

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

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

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

于 2008-12-25T05:10:32.297 回答
-2

最重要的是要意识到创建一个 Windows 服务是相当复杂的。在版本 6 和更高版本的产品上尤其如此,因为服务与桌面隔离。这里有一些评论

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

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

于 2008-12-25T05:19:52.717 回答