簡體   English   中英

Windows 服務無法啟動(錯誤 1053)

[英]Windows service will not start (Error 1053)

我有一個正在嘗試調試的 Windows 服務。 現在即使當前代碼可以工作,它也無法啟動。 錯誤是:

Windows 無法在本地計算機上啟動 MyService 服務

錯誤 1053:服務沒有及時響應啟動或控制請求。

為了隔離錯誤,我嘗試注釋掉所有內容。 主要方法如下所示:

TextWriter tt = new StreamWriter(@"C:\startup.text", true);
tt.WriteLine("Starting up the service");
tt.Close();

ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] 
   { 
       new MyService()
   };

TextWriter tt2 = new StreamWriter(@"C:\startup.text", true);
tt2.WriteLine("Run...");
tt2.Close();

它將“啟動服務”和“運行...”打印到日志文件中。 我還剝離了 MyService 的內部,因此它是空的。 任何代碼都有一個 try/catch,現在減少到一些像上面那樣的日志行。 我從不輸入 catch 語句,它會記錄它。

OnStart 中的所有內容都已被注釋掉:

protected override void OnStart(string[] args)
{
}

所以我基本上沒有想法。 我認為錯誤是因為 Start 方法永遠不會完成(或不會在 30 秒內完成)。 是否有其他方法被調用? 任何想法表示贊賞。

額外信息: MyService 中的構造函數為空。 如果我插入一些 Thread.Sleep(5000) 行,則需要更長的時間才能彈出有關 Error 1053 的錯誤消息。 Main 方法似乎必須退出(沒有錯誤)。

您缺少ServiceBase.Run調用:

ServiceBase[] servicesToRun = new ServiceBase[]
                                { 
                                    new MyService() 
                                };
ServiceBase.Run(servicesToRun);

訂閱未處理的異常通知也可能是一個好主意:

static void Main() {
    ...
    AppDomain.CurrentDomain.UnhandledException 
                                      += CurrentDomain_UnhandledException;
    ...
}

private static void CurrentDomain_UnhandledException(
                                                 Object sender, 
                                                 UnhandledExceptionEventArgs e) {

    if (e != null && e.ExceptionObject != null) {
        // log exception:
    }
}

並將以下 try/catch 添加到 OnStart 因為 .NET/SCM 吞下異常:

protected override void OnStart(String[] args) {
    try {

    } catch(Exception e) {
        // log exception:
        throw;
    }
}

雖然這個線程相當陳舊,但這里是我的補充答案,因為它可能有助於其他人節省我投入幾個小時的時間:

情況

  • 用 C# 編寫的 Windows 服務監視目錄並將解析的消息從文件發布到 MQTT 主題,在 Win10 上運行良好,在家中對 WinXP 進行簡短測試時也運行良好

  • 在生產環境中,服務在Win10上運行良好,在WinXP上幾個小時后崩潰並且無法重新啟動(無法在本地計算機上啟動filemqttservice服務。錯誤1053:該服務沒有及時響應啟動或控制請求

解決方案

清除事件日志歷史! (Doh!)我的服務太健談了,無法在幾個小時內填滿事件日志緩沖區。 清除事件日志后,服務再次啟動。 當然,我刪除了從服務中生成消息的所有行

只需檢查兩邊的 .net 框架它應該是相同的,或者安裝端的farmework 應該比開發高

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM