自定义错误报告(XP 及更高版本)

Custom error reporting (XP and above)

提问人:Dialecticus 提问时间:4/25/2012 最后编辑:Alexey FrunzeDialecticus 更新时间:5/8/2012 访问量:165

问:

这是一个有点复杂的问题,有几个问题。请随时只回答您有答案的问题。

我的任务是为我们的几个组件创建小型转储,以防 Windows 异常,并支持 XP SP3 作为最小操作系统。 组件包括:

  • 独立 C++ 应用
  • 将在已知浏览器中使用的 CSP 和 PKCS11 库 (DLL)
  • 一个 UI 和一个非 UI 服务
  • 静态库,在前面的所有三点中都使用

要求是具有类似 WER(从 XP 开始)的东西,但将报告发送到专用的供应商服务器,而不是 Microsoft 当前的 Winqual 等效服务器。报告功能可以包装在一个静态库中,这真是太好了。

不过,也存在一些问题。DLL是特殊的野兽。如何仅在DLL代码中发生错误时生成报告?服务可能还需要一些特殊处理,我目前还不知道。

首先,有没有一个已知的开源库可以帮助我完成这个任务?如果没有,我就得自己卷。

我的第一个想法是在我的每个模块中都有一个休眠的看门狗线程。此线程仅等待一个事件,该事件将从未经处理的异常过滤器中设置。线程将使用 MiniDumpWriteDump 生成报告,通过 Internet 发送报告,然后完成,在上述过滤器中,我们将等待线程结束,然后终止进程。对这个解决方案有什么想法吗?例如,本地系统帐户下的 Windows 服务可以访问互联网吗?

Visual-C++ 错误 Windows错误报告

评论

0赞 Alexey Frunze 4/25/2012
在 Windows 7 中,可以将 WER 配置为将转储保存在指定位置。也许在 Vista 中也是如此。不确定XP。然后,您可以随时随地以您想要的方式发送转储。

答:

1赞 mox 5/8/2012 #1

您无需创建“等待异常”的线程。只需使用 UnhandledExceptionFilter 注册自己的 Exception 处理程序即可。看看这个URL,它很好地解释了在发生异常时如何采取MiniDumpWriteDump。

在本地系统凭据下运行的 Windows 服务没有网络访问权限。

评论

0赞 mox 5/8/2012
当然,每个进程只能注册一个 UnhandledExceptionFilter。只要开发 DLL 并在异常结构中放置适当的标志,在 DLL 中发生异常这一事实并不是一个真正的问题。DLL 是否注册另一个 UnhandledExceptionFilter,则删除前一个。
0赞 ixe013 5/8/2012
他们没有经过身份验证的访问权限,但他们可以很好地进入网络。WER 服务器如何对计算机进行身份验证?