我的客户端使用我编写的VB6程序遇到软件崩溃。
我已经设置了注册表以产生完整的故障转储,并且看到它可以与在其系统上崩溃的其他程序正常工作,但是由于某种原因,由于我的程序,它仍然在完全不同的目录中创建简单的故障转储。
我的程序在x64计算机上运行的是32位。如图所示,我已经为SOFTWARE \ Microsoft和SOFTWARE \ Wow6432Node \ Microsoft设置了注册表。
仍然不起作用。
有谁知道我如何确定每次程序崩溃都会产生完整的崩溃转储?
查看C:\ProgramData\Microsoft\Windows\WER
它具有的文件夹的权限
创建子文件夹LocalDumps
将继承权限。
因此,您应该修改该文件夹的权限,或者使用具有写权限的其他文件夹。
如果权限不允许,Windows可能无法读取注册表设置。例如,以下(确实很愚蠢的)权限也会阻止LocalDump:
Windows错误报告由Windows执行,仅将注册表项与操作系统结合使用。您说您同时设置了两者。如果是这样,那就很好。如果您仅设置32位注册表项,它将无法正常工作。
If you have a setting for AeDebug HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug
, those are executed before WER.
Note that this entry may exist in 32 bit (WOW6432Node) and 64 bit.
Usually that should result in starting a debugger, but who knows ... it might do nothing and just exit.
Make sure that there is no DWORD Disabled
with a value of 1
in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps
I have seen people using a REG_SZ for DumpFolder
in combination with %APPDATA%
. Only REG_EXPAND_SZ will expand environment variables.
If the WER dialog is enabled, someone may press the cancel button.
Set DWORD DontShowUI
to 1
to disable the dialog.
There's the machine wide setting
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting
but also user defined settings in
HKEY_CURRENT_USER\Software\Microsoft\Windows\Windows Error Reporting
机器值可能会被用户设置覆盖。
要测试您的设置是否有效,可以使用小型C ++程序进行测试。
#include "stdafx.h"
#include <exception>
int _tmain(int /*argc*/, _TCHAR* /*argv*/[])
{
throw std::exception();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句