2017-05-29 268 views
0

我有一個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天以上......

回答

0

我有這個開始發生後服務安裝Windows Creator's Edition更新。基本上它使整個計算機變得更慢,這是我認爲引發了這個問題。即使其中一項Windows服務也有超時問題。

我在網上學到的是服務的構造函數需要很快,但OnStart在SCM方面有更多的餘地。我的服務有一個C#包裝器,它包含一個在構造函數中調用的InitializeComponent()。我把這個電話轉到了OnStart,問題就消失了。

+0

哎呀,對不起。經過更徹底的測試後,我發現將初始化移動到OnStart會導致其他問題。它應該留在構造函數中。 –

+0

如果您認爲它是錯誤的,請刪除您的答案,而不是留下評論。 – Alex