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

use*_*248 3 windows crash-reports crash-dumps windows-error-reporting

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

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

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

仍然无法正常工作.

有谁知道我怎么能确定每次程序崩溃时都会产生完整的崩溃转储?

我所做的注册表更改

Tho*_*ler 5

要写入的文件夹的权限

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

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

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

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

注册表项的权限

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

LocalDumps权限

32对64位

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

的AeDebug

如果您有AeDebug的设置,那么HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug这些设置在WER之前执行.

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

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

LocalDumps已禁用

确保没有Disabled值为1in的DWORDHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps

使用REG_SZ而不是REG_EXPAND_SZ

我见过人们使用REG_SZ DumpFolder%APPDATA%.只有REG_EXPAND_SZ才会扩展环境变量.

使用前请先试用

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

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting
Run Code Online (Sandbox Code Playgroud)

  • 它似乎是权限问题.感谢您提供超级准确而详尽的答案! (2认同)