2015-07-21 61 views
0

我有一個Windows服務,它有幾個計時器作業。在OnStart方法中,我啓動所有這些定時器。實際上,從服務控制檯啓動服務需要很長時間,並且大部分時間都會報告: Windows無法在本地計算機上啓動'服務名稱'服務。 該服務未及時響應啓動或控制請求。OnStart後Windows服務執行邏輯

我知道我可以創建一個計時器來封裝其他計時器,以便我可以在OnStart事件之外啓動它們。但是,我正在尋找其他可能的解決方案,因爲我不喜歡有一個單獨的計時器,除了啓動其他進程以外別無它法。

+0

爲什麼啓動定時器需要很長時間?有數百個嗎?你確定你從OnStart回來嗎? (不這樣做是錯誤消息的通常原因。) –

+0

不,小於20.我們的自定義計時器類在啓動時執行Web服務和數據庫調用。 – confessor130

+0

我知道它是從OnStart返回的,因爲我之前沒有遇到錯誤。當我添加了2個更多的定時器時,那是我得到錯誤的時候。 – confessor130

回答

1

這不是一般的安全進行外部操作,如期間的OnStart網絡或數據庫調用,因爲你無法預測他們將需要多長時間,以及an excessively long service startup time can interfere with the system

服務控制管理器(SCM )等待,直到服務報告SERVICE_RUNNING的狀態。建議服務儘快報告此狀態,因爲系統中需要與SCM交互的其他組件將在此期間被阻止。某些功能可能需要直接或間接與SCM進行交互。

所以正確的解決方案是將此初始化移入單獨的線程。

但是,如果你不想這樣做,你可以調用RequestAdditionalTime

的RequestAdditionalTime方法旨在通過重寫OnContinue,在onPause,OnStart中,或調用OnStop方法被調用來請求其他執行掛起操作的時間,以防止服務控制管理器(SCM)將服務標記爲未響應。