2011-02-01 50 views
2

我的服務有時會失敗。這並不壞,在Windows 7和Windows Server 2003上,服務重新啓動。但在Windows XP上,我看到「WindowsService.exe遇到問題,需要關閉,我們對此造成的不便表示抱歉。」我將我的服務添加到要從錯誤報告中排除的應用程序列表中。它沒有幫助 - 沒有「發送報告」和「不發送」的消息顯示。 在我的服務中沒有未處理的豁免的主要問題。在一個dll中出現錯誤(使用非託管鱈魚),我無法糾正它。 如何設置我的服務,這是沒有這種按摩的工作? 加入: 我所有的代碼在try/catch塊中。事件日誌是「錯誤應用程序WindowsService.exe,版本1.0.0.0,錯誤模塊.dll,錯誤地址0x00010616」。WindowsService.exe遇到問題,需要關閉。我們對此造成的不便表示抱歉

+1

我希望你的程序有一個比「WindowsService.exe」更好的名稱,並且這只是你爲SO選擇的一個示例名稱。 – CodesInChaos 2011-02-01 14:55:40

+1

Yah!我找到了! ** kernel32.dll中的** SetLastError **函數**隱藏錯誤信息! – Str 2011-02-05 00:39:03

回答

2

試圖捕捉這個異常是一個糟糕的想法,訪問違規是一個相當骯髒的想法。在您的Main()方法中訂閱AppDomain.CurrentDomain.UnhandledException事件。在您的事件處理程序中調用Environment.Exit(1)。這是而不是保證運行,非託管代碼可能已經啓動了它自己的線程。您需要的大蒜叉是SetUnhandledExceptionFilter(),您應該在C++/CLI中編寫它。

0

您可以將有問題的代碼包裝在try/catch塊中並記錄異常。

+0

謝謝。但在我的服務中沒有任何未處理的豁免。在一個dll中出現錯誤(使用非託管鱈魚),我無法糾正它。 – Str 2011-02-01 13:51:29

0

嘗試將有問題的代碼包裝在try/catch塊中,然後可以使用異常數據並將其寫入可用於錯誤報告或調試的日誌。

我假設你在C#開發:

try/catch - C# Reference

0

作爲一個經驗法則:

  • 在窗口服務的所有直接的方法必須被包裹在一個try catch塊
  • 所有服務的OnStart必須做一個啓動計時器/循環/輪詢工作人員的最低限度的事情。
相關問題