这是一个有点复杂的问题,有几个问题。请随意只回答您有答案的问题。
我的任务是在我们的几个组件出现 Windows 异常的情况下创建小型转储,并支持 XP SP3 作为最小操作系统。 组件包括:
- 独立C++应用 将在
- 已知浏览器中使用的 CSP 和 PKCS11 库 (DLL)
- 一个 UI 和一个非 UI 服务
- 静态库,在前面的所有三点中使用
要求是具有类似于WER的东西(从XP开始),但将报告发送到专用供应商服务器,而不是Microsoft当前的Winqual等效服务器。报告功能可以包装在一个静态库中真是太好了。
不过,也存在一些问题。DLL是特殊的野兽。如何仅在DLL代码中发生错误时才生成报告?服务可能还需要一些特殊处理,我目前还不知道。
首先,是否有已知的开源库可以帮助我完成此任务?如果没有,我将不得不自己滚。
我的第一个想法是在我的每个模块中都有一个睡眠的看门狗线程。此线程仅等待一个事件,该事件将从未处理的异常筛选器设置。线程将使用 MiniDumpWriteDump 生成报告,通过互联网发送,然后完成,在提到的过滤器中,我们将等待线程结束,然后终止进程。对此解决方案有任何想法吗?例如,本地系统帐户下的Windows服务可以访问互联网吗?
您不需要创建"等待异常"的线程。只需使用 UnhandledExceptionFilter 注册您自己的 Exception 处理程序。看看这个URL,它很好地解释了当发生异常时如何采取MiniDumpWriteDump。
在本地系统凭据下运行的 Windows 服务没有网络访问权限。