2009-01-02 143 views

回答

4

並非嚴格如此 - 只會在異常未處理時導致問題。

4

如果該異常未被捕獲,並且氣泡備份到OnStart()方法,則會使服務崩潰。你通常會看到在Windows事件日誌類似於以下的消息:

「的服務名服務意外終止它已完成此x時間(s)

+0

我已經包裝了在try/catch中計時器運行時運行的整個方法,但沒有得到任何錯誤,但我的服務正在干擾! – Blankman 2009-01-02 19:42:44

+0

「干擾」是什麼意思? – bobwienholt 2009-01-02 19:45:39

2

如果你在拋出異常。如果你不想在發生異常時停止這個服務,那麼你需要爲你的服務提供一個服務。OnStart()方法需要一個try/catch。處理它(記錄它,繼續前進,或者其他)

我的首選項是處理預期的異常,並且有意外的異常導致服務停止或至少自動停止/重啓。意外的事情發生,你的服務將以未知的狀態運行,誰知道它會做什麼。

3

我們遇到了子線程上未處理異常的問題,導致服務停止,但未提供任何有關導致異常的信息。我們使用這種方法來找出異常的來源。

您可以將一個Handler放入該服務,以捕獲所有未處理的異常(包括該服務的所有子線程)。在VB.NET中,您將需要爲AppDomain.CurrentDomain.UnhandledException添加一個處理程序。它可能類似於C#。然後它會捕獲任何通過onStart冒出的東西。您可以選擇在那裏使用它,或允許它從那裏崩潰服務。