即使注册表设置正确,Windows也不产生完整的故障转储 [英] Windows does not produce full crash dumps even though registry is set correctly

查看:197
本文介绍了即使注册表设置正确,Windows也不产生完整的故障转储的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的客户使用我编写的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆