即使注册表设置正确,Windows也不产生完整的故障转储 [英] Windows does not produce full crash dumps even though registry is set correctly
问题描述
我的客户使用我编写的VB6程序遇到软件崩溃。
My client are experiencing software crashes with a VB6 program I wrote.
我已经设置了注册表来生成完整的崩溃转储,并且看到它可以正常运行其他在其系统上崩溃的程序,但是由于某种原因,对于我的程序,它仍然在完全不同的目录中创建简单的崩溃转储。
I had set up the registry to produce full crash dumps, and I saw it working correctly with other programs that crashed on their system, but for some reason, for my program, it stil creates the simple crash dumps in a totally different directory.
我的程序是32位的在x64电脑上运行。如图所示,我已经为SOFTWARE\Microsoft和SOFTWARE\Wow6432Node\Microsoft设置了注册表。
My program is 32 bit running on an x64 computer. I have setup the registry as shown in the picture, both for SOFTWARE\Microsoft and SOFTWARE\Wow6432Node\Microsoft.
仍然不起作用。
有人知道我如何确定每次程序崩溃都会产生完整的崩溃转储吗?
Does anyone know how I can be sure that full crash dumps are produced every time the program crashes?
推荐答案
文件夹的写入权限
查看文件夹的权限 C:CProgramData\Microsoft\Windows\ ERWER
它具有
- 读并执行
- 列出文件夹内容
- 读取
创建子文件夹 LocalDumps
将继承权限。
Creating a subfolder LocalDumps
will inherit the permissions.
因此,您应该修改该文件夹的权限或使用具有写权限的其他文件夹。
So you should either modify the permissions of that folder or use a different folder with write permissions.
如果权限不允许,Windows可能无法读取注册表设置。例如。以下(确实很愚蠢的)权限也会阻止LocalDump:
Windows might not be able to read the Registry settings if the permissions do not allow it. E.g. the following (really silly) permissions will prevent a LocalDump as well:
Windows错误报告由Windows执行,并且仅使用具有操作系统特定性的注册表项。您说您同时设置了两者。如果是这样,那很好。如果仅设置32位注册表项,它将无法正常工作。
Windows Error Reporting is executed by Windows and only uses the registry key with the bitness of the OS. You said you set up both. If that's true, it`s fine. If you only set up the 32 bit Registry key, it won't work.
如果具有AeDebug HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug
的设置,这些设置在WER之前执行。
If you have a setting for AeDebug HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug
, those are executed before WER.
请注意,此条目可能存在于32位(WOW6432Node)和64位中。
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.
请确保在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft中没有值
1
的DWORD Disabled
\Windows\Windows错误报告\LocalDumps
Make sure that there is no DWORD Disabled
with a value of 1
in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps
我看到人们在 DumpFolder
和%APPDATA%
一起使用REG_SZ。只有REG_EXPAND_SZ会扩展环境变量。
I have seen people using a REG_SZ for DumpFolder
in combination with %APPDATA%
. Only REG_EXPAND_SZ will expand environment variables.
如果启用了WER对话框,有人可以按取消按钮。
If the WER dialog is enabled, someone may press the cancel button.
将DWORD DontShowUI
设置为 1
禁用对话框。
Set DWORD DontShowUI
to 1
to disable the dialog.
存在机器范围的设置
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting
,而且还有用户定义的设置
but also user defined settings in
HKEY_CURRENT_USER\Software\Microsoft\Windows\Windows Error Reporting
也许计算机值被用户覆盖设置。
Perhaps the machine values are overwritten by the user settings.
要测试您的设置是否有效,您可以使用小型C ++进行测试
To test whether your settings work, you can test with a small C++ program.
#include "stdafx.h"
#include <exception>
int _tmain(int /*argc*/, _TCHAR* /*argv*/[])
{
throw std::exception();
}
这篇关于即使注册表设置正确,Windows也不产生完整的故障转储的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!