1

這是一個有點複雜的問題,有幾個問題。隨意回答只有你有答案的問題。自定義錯誤報告(XP及以上)

我有一個任務,在我們幾個組件的Windows例外情況下創建小型轉儲,並支持XP SP3作爲最小操作系統。組件包括:

  • 獨立C++應用
  • CSP和PKCS11庫(DLL的),以公知的瀏覽器上使用
  • 一個UI和一個非UI服務
  • 靜態庫,這是在所有使用的前三點

要求是有類似WER(從XP開始),但發送報告給專門的供應商服務器,而不是微軟當前的Winqual等價物。這將是非常好的報告功能可以包裝在一個靜態庫。

雖然有問題。 DLL是特殊的野獸。如何僅在DLL代碼中發生錯誤時生成報告?服務也可能需要一些特殊處理,目前我還沒有意識到。

首先,有沒有一個已知的開源庫可以幫助我完成這個任務?如果沒有,我不得不推出自己的。

我的第一個想法是在每個模塊中都有一個睡眠監視器線程。此線程僅等待事件,該事件將從unhandled exception filter設置。該線程將生成使用MiniDumpWriteDump的報告,通過互聯網發送並完成,並在提到的過濾器中等待線程結束,然後終止該過程。對此解決方案有什麼想法?例如,本地系統帳戶下的Windows服務可以訪問互聯網嗎?

+0

在Windows 7中,您可以配置WER以將轉儲保存在指定的位置。也許在Vista也是如此。不知道XP。然後,無論何時何地,只要您想要,您都可以發送垃圾郵件。 – 2012-04-25 10:42:25

回答

1

您不需要創建「等待異常」的線程。只需使用UnhandledExceptionFilter註冊您自己的異常處理程序。看看this的URL,很好的解釋瞭如何在發生異常時使用MiniDumpWriteDump。

在本地系統憑據下運行的Windows服務不具有網絡訪問權限。

+0

您可以(當然)註冊每個進程只有一個UnhandledExceptionFilter。只要您開發DLL並在異常結構中放置適當的標誌,在DLL中發生異常的事實就不是真正的問題。是一個DLL註冊另一個UnhandledExceptionFilter,然後刪除前一個。 – mox 2012-05-08 12:24:01

+0

他們沒有經過身份驗證的訪問權限,但他們可以很好地訪問網絡。無論如何,WER服務器如何認證計算機? – ixe013 2012-05-08 12:25:02

+0

正確,他們是匿名的! – mox 2012-05-08 12:28:56