2013-05-06 86 views
2

背景:一位客戶給了我一個第三方開發的Windows服務,他們希望我爲他們運行。但是,當我開始服務,它超時,我得到的1053「服務沒有響應......及時風格」的錯誤。爲什麼此服務「未及時響應啓動或控制請求」?

我已經反映了程序集以獲取正在它的啓動方法中執行的代碼,但從粗略的一瞥它看起來應該返回。

實際問題:有人可以解釋爲什麼此服務導致1053錯誤?

(檢查日誌文件已經確認計時器已被初始化和火災不止一次服務終止以前多了。)

private void InitTimers() 
{ 
    if (this._config.RunMode == RunModes.Continuous) 
    { 
     this.srvcTimer.Interval = Math.Max(this._config.Interval.TotalSeconds, 1.0) * 1000.0; 
    } 
    else 
    { 
     this.srvcTimer.Interval = 60000.0; 
    } 
    this.srvcTimer.AutoReset = true; 
    this.srvcTimer.Enabled = true; 
} 
+0

初始化過程中出錯可能是原因,是否還有其他錯誤記錄?您可能需要擴展日誌記錄以進行更好的調試。 – 2013-05-06 16:53:26

+0

檢查相關主題 http://stackoverflow.com/questions/158371/error-1053-the-service-did-not-respond-to-the-start-or-control-request-in-a -tim – user2830624 2013-11-19 10:40:00

+0

在您的服務的開始功能中發佈代碼 – 2014-12-23 06:45:32

回答

3

服務構造函數必須在「及時」的方式返回服務成功啓動。這意味着您不能在構造函數中啓動一個潛在的昂貴操作,但必須將其委託給另一個線程。

通常情況下,您可能會發現在開發服務時連接到本地數據庫沒有問題,但是一旦部署它並且必須通過Internet連接,則會發現它失敗。

沒有看到構造函數中的確切代碼,我不能肯定地說,但如果你將它移入線程,服務應該成功啓動。顯然這意味着你需要有一些方法來檢查服務是否已經正確啓動並從線程向主程序報告錯誤。

-1

這是因爲您已經定義了您的服務日誌,並將其更改爲代碼。

我最近遇到此,解決的辦法是刪除服務日誌註冊表:

HKLM/System/ControlSet001/services/eventlog/<your service name> 

如果你不知道這一點,請備份註冊表第一。

相關問題