[英]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.