2012-05-31 104 views
2

我有一個.net服務在Windows啓動時啓動,有時(完全隨機)服務無法啓動。.net服務在Windows啓動時啓動超時

事件查看器顯示:A timeout was reached (30000 milliseconds) while waiting for the MYSERVICE service to connect.

即使在該服務失敗,如果我手動啓動它來啓動機器(Windows登錄後),它啓動的罰款。

我的啓動方法是非常基本的,它只是用實際啓動邏輯啓動一個新線程(通常非常快)。

我的服務需要.net 3.5 sp1和有這些問題的機器是win7 x64。 我懷疑它與.net框架有關,但我不知道如何。 這發生在客戶端計算機上,並且他安裝了.net 4客戶端配置文件。

任何想法?

+0

您是否在應用程序中添加了任何日誌記錄以查看服務啓動過程中發生了什麼? – mservidio

+0

我添加了日誌到Windows事件日誌。日誌只顯示。我的'主'開始,但沒有達到'開始'方法 – jacob

回答

1

我遇到過這樣的問題。通常是由於啓動時的機器負載。例如,由於許多其他服務開始,我在SQL Server上出現此錯誤。

解決此問題的一個簡單方法是將服務設置爲以延遲模式啓動,因爲那樣您的服務將在較少的CPU和HD負載下啓動。

+0

如何以延遲模式啓動? – jacob

+1

管理工具,服務,屬性 – Paparazzi

+0

我目前也遇到了這個問題,並將其設置爲延遲啓動(如果您有WiX安裝程序,它是您可以附加的屬性)。 我的新問題是,在某些機器上的自動(延遲)是機器啓動後15分鐘 - 只是想分享,因爲它可能與實施此解決方法的人有關 – JoshHetland

1

如果它依賴於另一個服務,則設置依賴關係。

0

我們在Windows 10上有一個類似的問題,其中大多數基於.Net的服務在啓動時會失敗,但以後可以手動啓動就好了。出於某種原因,使用.NET編寫的服務需要較長時間才能在Windows 10中啓動,但此修補程序可在任何版本的Windows(包括Windows 7)上運行。默認情況下,如果某個服務需要超過30秒的時間才能開始響應,服務被Windows終止。

我能夠在註冊表中將該行爲更改爲60秒。轉到:

HKLM \系統\ CurrentControlSet \控制\

如果它不存在,創建一個DWORD名爲 「ServicesPipeTimeout」(減號引號)(32位)鍵。將其值設置爲60000(十進制)。這與毫秒中的60秒相關。

我甚至創造了一個REGFILE自動完成:

Windows註冊表編輯器5.00

版[HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \控制] 「ServicesPipeTimeout」= DWORD:0000ea60

只需粘貼到記事本並保存爲.reg文件。

這是不是延遲啓動,但增加了啓動後響應服務的響應時間。這解決了我們在多臺機器上的問題。不幸的是,我仍然不知道爲什麼.NET服務需要很長時間才能開始終止。但是,我覺得這是一個微軟的bug,並不一定是我們的用戶做錯了什麼......