2011-11-04 113 views
2

windows服務可以設置爲在特定時間運行..?在特定時間運行windows服務

From 8:00 am to 5:00pm run process 
From 5:00 pm to 8:00am run process 

這個過程可以每天運行,每週或一天..

請讓我知道,你的思想

回答

3

我面臨類似的情況,我不得不開發一種服務,該服務只在交易時間從每天上午11點到下午3點在這種特定情況下進行。這一天剩下的時間它將保持閒置。我分享了我在案件中所做的事情。我不確定這是否對你有幫助,但我希望它會有幫助。

兩個變量維護開始時間和結束時間

TimeSpan StartingTime = new TimeSpan(
          Int32.Parse(
           ConfigurationManager 
            .AppSettings["StartingTimeHour"]), 
          Int32.Parse(
           ConfigurationManager 
            .AppSettings["StartingTimeMinute"]), 0); 
TimeSpan EndingTime = new TimeSpan(
          Int32.Parse(
           ConfigurationManager 
            .AppSettings["EndingTimeHour"]), 
          Int32.Parse(
           ConfigurationManager 
            .AppSettings["EndingTimeMinute"]), 0); 
//Starting time and Ending time may change in future. So I used app.config 
//instead of fixing them to (11,0,0) and (15,0,0) respectively 

的方法來檢查它是否在交易時間

public bool TradingTime() 
{       
    TimeSpan CurrentTime = DateTime.Now.TimeOfDay; 
    return ((CurrentTime > StartingTime) && (CurrentTime < EndingTime));    
} 

然後如果有必要檢查時間,並根據執行的東西即:

while (TradingTime()) 
{ 
    //do whatever required 
} 
+1

你可以'Int32.TryParse(string,out int)'將字符串轉換爲整數的方法。如果字符串格式不正確,或者參數爲null或字符串包含大整數,則「Int32.Parse」方法將引發異常。但是'Int32.TryParse'在這種情況下不會發生異常。如果字符串不能轉換爲整數,它將返回'false',否則返回'true',然後第二個參數將包含整數值。 –

+0

但是,如果您需要自己處理上述所有異常情況,那麼可以使用'Int32.Parse'方法包裝適當的'try ... catch'塊並顯示適當的消息。 –

+0

謝謝@Sayem,你可以編輯我的答案,並把'Int32.TryParse(string,out int)'而不是'Int32.Parse'方法。 –

6

通常情況下,如果這是你的要求,你會通過編寫一個簡單的控制檯應用程序更好地服務,然後使用Windows Task Scheduler根據需要安排它。

這將提供與服務相同的好處,但允許您在部署後更多地控制調度。

+0

嗨,大家好,感謝您的快速回復。所有的建議看上去很不錯。但是在我開始,我想與大家分享我的應用程序的場景..程序將全天候運行*場景編號1從上午8:00到下午5:00,應用程序將檢查幾個文件夾並掃描它們,如果文件夾包含一些文件..程序將創建附加所有文件的電子郵件並將發送給用戶A *方案編號2從下午5:00到8:00是同一個進程將被執行,但不同的用戶使用這種情況下,我可以使用你的建議..? – Link

+0

@link它取決於 - 如果您希望服務只是連續觀看文件夾,那麼最好在服務中使用FileSystemWatcher,並持續觀看。如果你想擁有它在固定的時間運行,則任務計劃程序是一個很好的選擇,因爲它可以讓你輕鬆地更改計劃... –

2

有幾種方法可以解決這個問題。從編碼的角度來看,最簡單的方法是編寫一個控制檯應用程序,然後使用任務調度程序運行它。

一個windows服務總是在運行,所以你希望你的服務能夠休眠一段時間,喚醒檢查當前時間是否在窗口中,以及它是否被執行。

這兩種方法都有其優點和缺點,它更多地關注服務的功能。我不知道答案的一個問題是,如果計劃任務的用戶未登錄,那麼計劃的任務是否會運行。這是我最關心的任務調度程序方法。

+0

嗨,大家好, 感謝您的快速回復。所有的建議看上去很不錯..但在此之前我開始我想與大家分享我的應用程序的情況。該計劃將通過24/7 *情景1號 從上午8:00持續到下午5:00的應用程序將檢查幾個文件夾和掃描他們,如果文件夾包含一些文件..該計劃將建立一個電子郵件連接的所有文件和將被髮送到用戶A *案例數量2 從下午5:00到8:00同樣的過程將被執行 但不同的用戶 我們在這種情況下,我可以使用你的建議..? – Link

+0

如果它是不同的用戶,我認爲你真的想要與計劃任務。否則你會打開一整套關於管理身份的蠕蟲 - 它會變得很難看。 – Jason

+0

非常感謝你的幫助傑森..感激.. – Link

0

你可以做的是使用Windows任務調度程序並創建一個任務來啓動服務,另一個任務是停止服務。所有你需要做的就是創建一個批處理文件來啓動和停止服務。

實例啓動服務:

net start MyService 

實例停止服務

net stop MyService 
相關問題