即使正确设置了注册表,Windows也不会产生完整的崩溃转储

时间:2015-05-26 11:43:09

标签: windows crash-reports crash-dumps windows-error-reporting

我的客户正在使用我编写的VB6程序遇到软件崩溃。

我已经设置了注册表以生成完整的崩溃转储,我看到它与其他程序崩溃的系统正常工作,但出于某种原因,对于我的程序,它stil创建了一个完全不同的简单崩溃转储。目录

我的程序在x64计算机上运行32位。我已经设置了如图所示的注册表,包括SOFTWARE \ Microsoft和SOFTWARE \ Wow6432Node \ Microsoft。

仍然无效。

有没有人知道如何确保每次程序崩溃时都会产生完整的崩溃转储?

Registry changes I hade made

1 个答案:

答案 0 :(得分:5)

要写入

的文件夹的权限

查看文件夹C:\ProgramData\Microsoft\Windows\WER的权限

  • 阅读&执行
  • 列出文件夹内容

创建子文件夹LocalDumps将继承权限。

因此,您应该修改该文件夹的权限,或者使用具有写权限的其他文件夹。

注册表项的权限

如果权限不允许,Windows可能无法读取注册表设置。例如。以下(非常愚蠢)权限也会阻止LocalDump:

LocalDumps permissions

32对64位

Windows错误报告由Windows执行,仅使用具有操作系统位数的注册表项。你说你设置了两个。如果这是真的,那很好。如果您只设置32位注册表项,它将无法正常工作。

的AeDebug

如果您有AeDebug HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug的设置,则会在WER之前执行。

请注意,此条目可能存在于32位(WOW6432Node)和64位。

通常这会导致启动调试器,但谁知道......它可能什么也不做,只是退出。

禁用LocalDumps

确保Disabled

中没有值1的DWORD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps

使用REG_SZ而不是REG_EXPAND_SZ

我见过人们将DumpFolder的REG_SZ与%APPDATA%结合使用。只有REG_EXPAND_SZ才会扩展环境变量。

有人取消崩溃转储生成

如果启用了WER对话框,有人可能会按下取消按钮。

将DWORD DontShowUI设置为1以禁用对话框。

用户设置而不是机器设置

机器范围设置

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting

还有用户定义的设置

HKEY_CURRENT_USER\Software\Microsoft\Windows\Windows Error Reporting

用户设置可能会覆盖机器值。

在使用之前尝试

要测试您的设置是否有效,可以使用小型C ++程序进行测试。

#include "stdafx.h"
#include <exception>

int _tmain(int /*argc*/, _TCHAR* /*argv*/[])
{
    throw std::exception();
}