我的客户在使用我编写的 VB6 程序时遇到软件崩溃。
我已经设置了注册表以生成完整的故障转储,并且我看到它可以与其他在其系统上崩溃的程序一起正常工作,但由于某种原因,对于我的程序,它仍然在完全不同的目录中创建简单的故障转储。
我的程序是在 x64 计算机上运行的 32 位程序。我已经为 SOFTWARE\Microsoft 和 SOFTWARE\Wow6432Node\Microsoft 设置了如图所示的注册表。
还是不行。
有谁知道我如何确定每次程序崩溃时都会产生完整的崩溃转储?

我的客户在使用我编写的 VB6 程序时遇到软件崩溃。
我已经设置了注册表以生成完整的故障转储,并且我看到它可以与其他在其系统上崩溃的程序一起正常工作,但由于某种原因,对于我的程序,它仍然在完全不同的目录中创建简单的故障转储。
我的程序是在 x64 计算机上运行的 32 位程序。我已经为 SOFTWARE\Microsoft 和 SOFTWARE\Wow6432Node\Microsoft 设置了如图所示的注册表。
还是不行。
有谁知道我如何确定每次程序崩溃时都会产生完整的崩溃转储?

查看C:\ProgramData\Microsoft\Windows\WER它拥有的文件夹的权限
创建子文件夹LocalDumps将继承权限。
因此,您应该修改该文件夹的权限或使用具有写入权限的其他文件夹。
如果权限不允许,Windows 可能无法读取注册表设置。例如,以下(非常愚蠢的)权限也将阻止 LocalDump:
Windows 错误报告由 Windows 执行,并且仅使用具有操作系统位数的注册表项。你说你设置了两个。如果这是真的,那很好。如果您只设置了 32 位注册表项,它将无法正常工作。
如果您有 AeDebug 设置HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug,则这些设置在 WER 之前执行。
请注意,此条目可能存在于 32 位 (WOW6432Node) 和 64 位中。
通常这应该会导致启动调试器,但谁知道......它可能什么也不做,只是退出。
确保没有Disabled值为1in的 DWORDHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps
我见过有人将 REG_SZDumpFolder与%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();
}