2010-09-15 137 views
12

我的自動啓動Windows服務無法在重新啓動時啓動。我有一個在C#中創建的Windows服務,並通過Wix創建的安裝程序進行安裝。該服務設置爲自動啓動。該服務已安裝並在NT AUTHORITY \ NETWORK SERVICE下運行。當服務啓動時,它首先進行外部Web服務調用。重新啓動後Windows Service不會自動啓動

在Windows 7中,我可以將服務設置爲自動 - 延遲啓動,服務將在重新啓動時啓動沒有問題。然而,此選項不是在Windows XP中可用,而當設置爲自動啓動,服務失敗,因爲

A timeout was reached (30000 milliseconds) while waiting for the MyService service to connect.

如果我嘗試登錄過程後手動啓動,該服務啓動正常,它是隻有當服務試圖在重新啓動時自動啓動時出現問題時,纔會導致我相信存在需要添加到服務中的依賴項服務才能正常啓動。

任何人都可以指向正確的依賴關係或替代方法嗎?

回答

11

你可能有一個依賴的競爭條件。你可以通過配置你的服務來依賴另一個服務(比如說tcp/ip)來解決這個問題,但是我真正要做的就是重寫你的服務,以免在啓動的關鍵執行路徑中進行這個調用。它應該定期嘗試在稍後進行web服務調用並記錄有用的消息,或者在需要解決的問題時將消息發送到任務欄實用程序或類似程序。

+0

我已經考慮過這兩者。問題在於調用是爲了檢索遠程配置設置,因此是作爲SettingsProvider的擴展內置到Settings中的。 – 2010-09-15 17:43:13

+1

對不起,但它需要完成。最基本的設計是脆弱的。 Web是無狀態的,並假設它是其他的錯誤。 – 2010-09-15 17:52:03

+1

我接受了你的建議,並使我的OnStart()方法完成最低限度的功能,並啓動一個Timer,稍後執行它以下拉配置設置並初始化服務功能。 – 2010-10-01 20:45:13

0

我在4臺新服務器上遇到同樣的問題。我將W32服務設置爲自動延遲並解決了問題。