2012-11-20 106 views
1

我需要優雅地處理我的代碼中的錯誤並停止服務。如何在錯誤後停止服務?

protected override void OnStart(string[] args) 
{ 

    oMyObject = new MyObject(args); 
    if (oMyObject.RunStartup()) 
    { 

     oThread = new Thread(new ThreadStart(oMyObject.MainLoop)); 
     oThread.Start(); 

    } 

    base.OnStart(args); 

} 

oMyObject.RunStartup()向事件日誌中寫入錯誤,如果錯誤返回false。

但是,服務未停止,並且事件日誌顯示「服務已成功啓動」。

如何在沒有顯示「服務已成功啓動」的事件日誌的情況下退出並停止OnStart()中的服務?

+2

[異常處理](http://msdn.microsoft.com/en-gb/library/vstudio/ms229005.aspx) – Oded

回答

0

做了什麼Oded說。投擲和異常,不要抓住它是處理這個問題的最好方法。

0

如果我還記得你可以打電話Stop(),如:

protected override void OnStart(string[] args) 
{ 

    oMyObject = new MyObject(args); 

    if (!oMyObject.RunStartup()) { 
     Stop(); 
     return; 
    } 

    oThread = new Thread(new ThreadStart(oMyObject.MainLoop)); 
    oThread.Start(); 

    base.OnStart(args); 

} 

在這裏看到更多的信息:

http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase.stop.aspx

+1

此處的問題是,事件日誌中顯示「服務已成功停止」的錯誤。 – Espen

+0

然後提出異常並返回true或false。 – Lloyd

2

您是否嘗試過實施OnStop()方法,而不是試圖檢測站在OnStart()方法?

然後,您應該能夠創建一個ServiceController實例並檢查該服務的Status屬性。

編輯:對不起,這是@Lloyd回答(不能留下評論)的擴展。


更新:

其實想它只是增加一個TryCatch塊你OnStart()應該足以捕獲異常(見OP @Oded評論),並允許你關閉服務並登錄到事件日誌中,看看你是否適合。

+1

解決方案不是爲了捕捉異常,而是拋出異常,而不是抓住它。我試圖做的是退出服務時出現錯誤,而不是處理錯誤。 – Espen