使用 WER

从 Windows Vista 开始,Windows 默认提供崩溃、非响应和内核错误报告,而无需更改应用程序。 如果需要,报告将包含小型转储和堆转储信息。 应用程序改用 WER API 向 Microsoft 发送特定于应用程序的问题报告。

由于 Windows 会自动报告未经处理的异常,因此应用程序不应处理致命异常。 如果故障或无响应过程是交互式的,WER 会显示一个用户界面,通知用户问题。 如果在用户尝试与应用程序交互时 5 秒内未响应 Windows 消息,则应用程序将被视为无响应。

崩溃、非响应和内核故障的Windows 错误报告流

下面显示了针对应用程序崩溃、非响应或内核故障所发生的步骤。

  1. 发生问题事件。
  2. 操作系统调用 WER。
  3. WER 会收集数据、生成报告,并在需要时提示用户同意 () 。
  4. 如果用户同意,WER 会将报告发送给 Microsoft (Watson Server) 。
  5. 如果 Watson 服务器请求其他数据,WER 会收集数据,并提示用户同意 (如果需要) 。
  6. 如果应用程序已注册恢复和重启,则 WER 在压缩数据时执行已注册的回调函数,并在用户同意) 时发送到 Microsoft (。
  7. 如果 Microsoft 提供了对问题的响应,则会通知用户。

应用程序可以使用以下函数来自定义发送给 Microsoft 的报表的内容。 注册函数告知 WER 在创建的错误报告中包括特定的文件和内存块。

通用事件报告的Windows 错误报告流

以下步骤说明应用程序如何获取非严重错误条件的错误报告。

  1. 发生非致命问题事件。
  2. 应用程序识别事件并使用以下函数调用序列来生成报表。
    1. 调用 WerReportCreate 函数以创建报表。
    2. 调用 WerReportSetParameter 函数以设置报表参数。
    3. 调用 WerReportAddFile 函数以将文件添加到报表。
    4. 如果需要,请调用 WerReportAddDump 函数将小型转储添加到报表 () 。
    5. 调用 WerReportSubmit 函数以发送报表。
    6. 调用 WerReportCloseHandle 以释放资源。
  3. 根据调用步骤 2 中的函数时使用的特定选项,WER 将完成错误报告。 WER 将确保按照用户设置的策略完成报告。 例如,WER 会将报表发送给 Microsoft,将报表排队,并向用户显示相应的用户界面。

从Windows 错误报告中排除应用程序

若要从 Windows 错误报告中排除应用程序,请使用 WerAddExcludedApplication 函数。 若要还原应用程序的错误报告,请使用 WerRemoveExcludedApplication 函数。

自动恢复数据并重启出错的应用程序

应用程序可以使用应用程序恢复和重启在应用程序因未经处理的异常或应用程序停止响应而退出之前保存数据和状态信息。 如果请求,应用程序也会重启。 有关详细信息,请参阅 应用程序恢复和重启

旧版 API

应用程序可以通过调用 ReportFault 函数来报告错误。 但是,除非有操作系统的默认错误报告行为无法满足的非常具体的要求,否则不应使用 ReportFault 函数。

如果启用了错误报告,系统将向用户显示一个对话框,指示应用程序遇到问题并将关闭。 如果在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug 键中配置了调试器,则为用户提供启动调试器的选项。 用户还可以选择向 Microsoft 发送报表。 如果用户发送报表,系统将显示另一个对话框,感谢用户提供报告并提供指向详细信息的链接。

错误报告系统支持以下操作模式。

操作模式 说明
共享内存报告 如果应用程序的安全上下文与登录用户的安全上下文相同,则错误报告系统将使用共享内存块进行通信。 此模式不能与清单报告模式一起使用。
清单报告 如果应用程序的安全上下文与登录用户的安全上下文不同,则错误报告系统将使用文件进行通信。 此模式还用于报告无响应的应用程序和内核错误。 此模式不能与共享内存报告模式一起使用。
Internet 报告 错误报告系统通过 Internet 将所有数据发送到 Microsoft。 这是默认的运行模式。 它不能与公司报告模式一起使用。 当管理员未指定公司上传路径时,将使用此模式。
公司报告 错误报告系统将所有数据发送到文件共享,而不是将其直接上传到 Microsoft。 这允许企业 IT 经理在将数据发送给 Microsoft 之前查看数据。 当存在管理员指定的公司上传路径时,将使用此模式。 它不能与 Internet 报告模式一起使用。
无外设报告 错误报告系统不会向用户显示任何对话框。 这使公司 IT 经理能够随时从其员工那里收集错误报告。 当管理员启用报告但禁用通知时,将使用此模式。 它只能与公司报告模式一起使用。

若要从错误报告中排除应用程序,请使用 AddERExcludedApplication 函数。