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

发布于 2015-05-26 21:18:13
要写入的文件夹的权限
查看它拥有的文件夹C:\ProgramData\Microsoft\Windows\WER的权限
创建子文件夹LocalDumps将继承权限。
因此,您应该修改该文件夹的权限,或者使用另一个具有写权限的文件夹。
注册表密钥的权限
如果权限不允许,Windows可能无法读取注册表设置。例如,下面(非常愚蠢的)权限也会阻止LocalDump:

32位对64位
Windows错误报告由Windows执行,并且只使用带有操作系统的bitness的注册表项。你说你两个都是你安排的。如果那是真的,没关系。如果您只设置32位注册表键,它将无法工作。
AeDebug
如果您有AeDebug HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug的设置,这些设置将在WER之前执行。
请注意,此条目可能存在于32位(WOW6432Node)和64位中。
通常这会导致启动调试器,但是谁知道.它可能什么也做不了就退出。
LocalDumps被禁用
确保在Disabled中没有值为1的DWORD 1。
用REG_SZ代替REG_EXPAND_SZ
我见过人们使用REG_SZ for DumpFolder和%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();
}https://stackoverflow.com/questions/30457570
复制相似问题