2014-02-26 103 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根據您認爲合適的時間表運行。

希望這會有所幫助。

相關問題