Windows服务每6个小时做一次工作

Neb*_*ron 2 .net c# rest windows-services

我有一个只有两个方法的Windows服务 - 一个私有方法DoWork(),以及一个调用DoWork方法的公开方法.我想实现以下目标:

  • Windows服务DoWork()每6小时运行一次
  • 外部程序也可以调用调用DoWork()方法的公开方法.如果服务已在运行从服务DoWork()调用的方法,则在当前方法结束后将再次调用该服务.

解决这个问题的最佳方法是什么?谢谢!

Kri*_*ast 7

另一种方法是使用可由Windows任务调度程序调度的控制台应用程序,每6小时运行一次.在这种情况下,您不会浪费资源来保持Windows服务在整个时间内运行,而只在需要时消耗资源.

对于您的第二个问题:当您采用控制台应用程序方法时,您可以通过使用Process.Start来调用它.


sen*_*nfo 5

如果应用程序的目的只是每六个小时运行一次特定任务,那么最好创建命令行应用程序并创建Windows自动运行的计划任务.显然,您可以手动启动此应用程序.

如果你仍然相信你需要一个服务(和说实话,从我迄今所看到的,它听起来就像你不这样做),你应该考虑使用一个计时器,但仔细选择你的计时器和阅读这篇文章,以更好地了解.NET内置的计时器(提示:密切关注System.Timers.Timer).

要防止重新进入,如果另一个方法在进程正在执行其操作时尝试调用DoWork(),请查看使用MutexSemaphore.