2012-05-15 178 views
3

我創建了運行多個任務的.net c#windows服務。我在其中包含了異常處理,但我想設置一個全局處理程序來捕獲windows服務中未處理的異常,我該怎麼做?Windows服務中未處理的異常

回答

5

我包含在它的異常處理,但我想建立一個全球性的處理程序來捕獲未處理的窗口服務異常

可能使用AppDomain.UnhandledException。然而,在你的情況下,你對服務的整個調用可以被封裝在try/catch塊中。既然你沒有提供你打算處理這個未處理異常的細節,我認爲在這種情況下你的正確路徑是讓服務崩潰

try 
{ 
    MainCallToYourService(); 
} 
catch (Exception) 
{ 
    //it's probably too late to do anything useful here, try to log and die 
} 

但請記住,在這樣做的問題是,在很多情況下,你的應用程序的狀態是由腐敗引發此事件的時間。你最好的選擇是嘗試並記錄下來,然後離開。

+0

這是正確的答案。許多人得到異常處理錯誤。捕捉無法處理的異常絕對沒有意義。當你得到一個未處理的全局異常時,你能做的最好的事情就是崩潰(事實上,事實上已經發生了)。如果您只想記錄它,請使用'AppDomain.UnhandledException',如您所述。 –

+1

我明白這一點,但我想要做的就是能夠記錄異常,以便對其進行跟蹤。我嘗試了AppDomain.UnhandledException,並且在創建服務時設置了事件處理程序,但事件永遠不會被觸發。任何想法爲什麼? – amateur

+0

@amateur:你是在創建其他線程,還是隻有一個單線程服務? –