即使正确设置了注册表,Windows也不会产生完整的崩溃转储

问题描述 投票:3回答:1

我的客户正在使用我编写的VB6程序遇到软件崩溃。

我已经设置了注册表来生成完整的崩溃转储,我看到它与其他程序崩溃的系统正常工作,但出于某种原因,对于我的程序,它会在完全不同的目录中创建简单的崩溃转储。

我的程序在x64计算机上运行32位。我已经设置了如图所示的注册表,包括SOFTWARE \ Microsoft和SOFTWARE \ Wow6432Node \ Microsoft。

仍然无法正常工作。

有谁知道我怎么能确定每次程序崩溃时都会产生完整的崩溃转储?

windows crash-reports crash-dumps windows-error-reporting
1个回答
5
投票

要写入的文件夹的权限

看看它有C:\ProgramData\Microsoft\Windows\WER文件夹的权限

  • 阅读并执行
  • 列出文件夹内容

创建子文件夹LocalDumps将继承权限。

因此,您应该修改该文件夹的权限,或者使用具有写入权限的其他文件夹。

注册表项的权限

如果权限不允许,Windows可能无法读取注册表设置。例如。以下(非常愚蠢)权限也会阻止LocalDump:

LocalDumps permissions

32对64位

Windows错误报告由Windows执行,仅使用具有操作系统位数的注册表项。你说你设置了两个。如果这是真的,那很好。如果您只设置32位注册表项,它将无法正常工作。

的AeDebug

如果您有AeDebug HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug的设置,那么这些设置在WER之前执行。

请注意,此条目可能存在于32位(WOW6432Node)和64位中。

通常这会导致启动调试器,但谁知道......它可能什么也不做,只是退出。

LocalDumps已禁用

确保在Disabled中没有值为1的DWORD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps

使用REG_SZ而不是REG_EXPAND_SZ

我见过人们将DumpFolder的REG_SZ与%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();
}
© www.soinside.com 2019 - 2024. All rights reserved.