我有一個Windows服務在vb.NET中編程,使用Topshelf作爲服務主機。 偶爾服務無法啓動。在事件日誌中,SCM寫入錯誤7000和7009(服務沒有及時響應)。我知道這是一個常見問題,但我(想)我已經嘗試了一切,沒有結果。 該服務僅依賴於WMI,並且沒有耗時的操作。 我讀過這個問題(Error 1053: the service did not respond to the start or control request in a timely fashion),但沒有答案爲我工作。Windows服務超時錯誤7000 7009
我想:
- 集topshelf的啓動超時。
- 在「OnStart」方法的第一行中請求額外的時間。
- 設置一個週期性的定時器,向SCM提供額外的時間。
- 刪除TopShelf並使用Visual Studio服務模板提供服務。
- 將初始化代碼和「OnStart」代碼移動到新線程以立即返回。
- 建立在RELEASE模式。
- 在app.config文件(每個應用程序)中設置GeneratePublisherEvidence = false。
- 未選中互聯網設置(每臺計算機)中的「檢查發行商的證書撤銷」。
- 刪除所有備用流(以防某些dll被標記爲網頁並被阻止)。
- 刪除任何「調試代碼」
- 將窗口的常規服務超時增加到120000ms。
另外:
- 該服務不會嘗試與用戶以任何方式桌面進行通信。
- UAC被禁用。
- 服務在本地系統帳戶上運行。
我認爲,服務本身的代碼是不是因爲這個問題:
- 它已經生產了超過兩年。
- 通常服務啓動正常。
- 事件日誌中沒有記錄異常。
- 服務dosn't被稱爲(因爲該服務並沒有真正失敗,只是不響應SCM)的「錯誤」選項
- 我已經註釋了幾乎所有的東西,追求這個錯誤! ;-)
任何幫助是值得歡迎的,因爲我完全是出出主意,我一直是這樣strugling 15天以上......
哎呀,對不起。經過更徹底的測試後,我發現將初始化移動到OnStart會導致其他問題。它應該留在構造函數中。 –
如果您認爲它是錯誤的,請刪除您的答案,而不是留下評論。 – Alex