如何安排C#Windows服务在该月的第一天运行方法?

时间:2014-02-18 14:45:23

标签: c# windows-services

如何安排Windows服务器每个月的第一天运行方法/功能? 我本来是创建了一个小型控制台应用程序,并使用内置在任务调度程序中的窗口安排它,但是在需要部署的环境中,这不是一个选项。

如何使用计时器实现这一点,或者我应该研究一个更好的选择。让服务空闲一整月并不是一个问题就是这个环境。

2 个答案:

答案 0 :(得分:0)

Windows有Waitable Timer个对象。您可以设置计时器以在给定日期/时间引发事件。也就是说,您可以在2014年1月3日11:55:37 PM设置计时器。定时器具有64位周期,因此其范围远大于其他定时器(如System.Timers.TimerSystem.Threading.Timer,限制为40亿毫秒或28天)。

该对象在.NET中没有相应的对象,但我为它编写了一个包装器。我写了一篇关于计时器的文章,但发布它的网站不再在线了。 C#中的Waitable Timer的完整代码可在http://www.mischel.com/pubs/waitabletimer.zip获得。

也就是说,使用预定任务确实是最好的选择。我强烈建议您查看是否可以更改策略以便可以使用它。一个常见的问题是管理员说他们不想用GUI设置任务,不知何故没有意识到有一个命令行程序schtasks.exe,它允许你做GUI所做的一切,以及更多。

答案 1 :(得分:0)

我刚刚创建了一个非常类似的东西,只需创建一个这样的新线程:

    const int MillisecondResponseRate = 10000;
    public void DoWork()
       {
       bool executionFlag = true;

      do
          {
          Thread.Sleep(MillisecondResponseRate);
          CheckTasks();
          } while (executionFlag == true);
      }

变量'MillisecondResponseRate'是您希望测试条件的速率,在您的情况下应该是每24小时而不是10000(10秒),就像我的代码一样。

CheckTasks方法应该是测试您希望执行操作的时间的代码,如果它的时间只是执行您需要的操作。

希望它有所帮助!