2014-02-26 81 views
1

我有一个Windows服务,我需要在特定时间运行。假设时间为晚上11:00。目前我有代码在每天运行此服务但如何添加时间变量到这我不能得到。 这是我在C#代码..如何在特定时间每天运行Windows服务

protected override void OnStart(string[] args) 
    { 
     timer = new Timer(); 
     timer.Interval = 1000 * 60 * 60 * 24;//set interval of one day 
     timer.Elapsed += new ElapsedEventHandler(timer_Elapsed); 
     start_timer(); 

    } 

    static void timer_Elapsed(object sender, ElapsedEventArgs e) 
    { 
     // Add your code here 
     readDataFromAd(); 

    } 
    private static void start_timer() 
    { 
     timer.Start(); 
    } 

请帮我在确定的时间也与interval.The时间一起应该是11:00 PM和计时器应执行该方法的每一天。

回答

3

最好的选择是在windows服务中使用Quartz schedular。使用石英,您还可以根据执行时间安排单个服务中的多个工作,如每天早上5点。 ,每小时,每分钟,每周等等,它使用起来太灵活。

+0

同意,此外还有Windows调度程序 – Cynede

+1

如何在我给定的代码中使用时间概念... – Pranav

0

Quartz很棒,但如果你只想每天运行一次你的服务,那么内置的Windows任务计划程序也是一个不错的选择。

您可以:

  1. 更改为您服务,删除定时器/睡眠和调用readDataFromAd()从一个线程的OnStart()(discussion on why a thread may be necessary here
  2. 开始创建任务计划中的一个任务执行位于11点以下命令:

    NET START YOUR-服务的名称

0

试试这个:

protected override void OnStart(string[] args) 
     { 

       _timer.Enabled = true; 

       DateTime currentTime = DateTime.Now; 
       int intervalToElapse = 0; 
       DateTime scheduleTime = Convert.ToDateTime(ConfigurationSettings.AppSettings["TimeToRun"]); 

       if (currentTime <= scheduleTime) 
        intervalToElapse = (int)scheduleTime.Subtract(currentTime).TotalSeconds; 
       else 
        intervalToElapse = (int)scheduleTime.AddDays(1).Subtract(currentTime).TotalSeconds; 

       _timer = new System.Timers.Timer(intervalToElapse * 1000); 
       _timer.AutoReset = true; 
       _timer.Elapsed += new System.Timers.ElapsedEventHandler(_timer_Elapsed); 
       _timer.Start(); 
     } 

private void _timer_Elapsed(object sender, ElapsedEventArgs e) 
     { 
      //do your thing 
//set it to run on a 24-hour basis 
    _timer.Interval = 60 * 60 * 24 * 1000; 

} 
2

我会建议改变你的方法。服务通常用于长期运行的进程始终运行。对于按计划运行的进程,Windows有一个名为“任务计划程序”的内置组件,专门用于按计划运行应用程序。

您可以简单地将您的应用程序服务代码粘贴到一个Windows控制台应用程序中,然后安排结果的exe使用Windows Task Scheduler根据您认为合适的时间表运行。

希望这会有所帮助。

相关问题