2009-07-21 61 views
7

我已經部署了我的窗口服務(使用獨立安裝程序類和SC.EXE),但我得到一個錯誤,當我嘗試啓動:啓動Windows服務的超時時間是多少?

--------------------------- 
Services 
--------------------------- 
Could not start the MyName service on Local Computer. 



Error 1053: The service did not respond to the start or control request in a timely fashion. 

什麼是超時?感覺就像3秒左右。如果我的服務需要更長時間,我需要做什麼?

回答

14

在服務類中,使用ServiceBase.RequestAdditionalTime()在你的OnStart /調用OnStop方法:

// request an additional 4 seconds to complete the operation 
RequestAdditionalTime(4000); 
11

創建服務的正常方式是讓啓動代碼創建一個新線程並在該線程中運行您的服務。

服務啓動應該幾乎是瞬間的 - 只不過是產生一個新的線程與你的「真實」的工作。

如果您花費的時間超過三秒鐘,這表示您正在主線程中執行真正的工作,而不是爲您的服務創建單獨的工作。

+2

這是假定設計不良的地方可能不存在。複雜的初始化可能需要額外的時間,並且「無法響應」消息會提醒用戶啓動失敗。如果線程中發生故障並且服務因此而停止,則唯一可見的證據(沒有單獨的監視UI)將位於事件日誌中。 – 2009-07-21 16:42:10

+0

爲什麼? ! – zvolkov 2009-07-21 16:48:29

2

在問候的具體問題,確切的超時時間而變化,但不超過30秒。您可以通過註冊表項控制服務的默認啓動超時,您可以看到如何執行此操作here

但是,我會同意其他許多人的看法,我會考慮兩種可能的選擇。

  1. 讓您的服務儘快啓動,生成一個線程,等等。
  2. 如果你不能選擇一個去,你可以使用RequestAdditionalTime()。請務必儘早撥打此電話。
1

此外,如果您已在不同的物理環境中測試該服務,並且問題似乎不是正常的啓動時間,而是PC的性能。您可以增加特定PC的註冊表項的超時時間。

請參閱: http://support.microsoft.com/kb/839803

問候