我已经编写了一个应用程序,我想要进行一定程度的自动调试。我想使用Windows错误报告将崩溃转储输出到运行应用程序的同一文件夹中。我的想法是,我可以让我的应用程序在其自己的文件夹中查找任何dmp文件,然后根据需要上传它们进行分析。
我已经为其他所有内容获得了相应的注册表项,但如何设置DumpFolder键以指向我的应用程序从哪个位置运行?
答案 0 :(得分:1)
我对之前的项目有类似的要求。我想捕获WER生成的崩溃转储文件。也就是说,我不希望将其发送到WER报告服务器。这要求我设置 LocalDumps WER注册表项和一些值。我写了一个小实用程序,它使用以下代码片段。请注意,我必须将此代码作为 admin 运行。
CRegKey rk;
TCHAR pszValue[MAX_PATH+1] = {0};
DWORD dwValue = 0;
DWORD dwSize = MAX_PATH;
// check for existence of "LocalDumps" key.
LONG ret = rk.Open (HKEY_LOCAL_MACHINE, _T("Software\\Microsoft\\Windows\\Windows Error Reporting"),
KEY_WRITE | KEY_WOW64_64KEY);
if (ret == ERROR_SUCCESS)
{
ret = rk.Create (rk.m_hKey, _T("LocalDumps\\<your application>.exe"));
if (ret == ERROR_SUCCESS)
{
CString szText;
DWORD dwValue = 0;
m_NumDumpsED.GetWindowText (szText);
dwValue = atol (szText);
rk.SetDWORDValue (_T("DumpCount"), dwValue);
m_DumpFolderED.GetWindowText (szText);
rk.SetStringValue (_T("DumpFolder"), szText);
dwValue = (m_MiniFullRB == 0) ? 1 : 2;
rk.SetDWORDValue (_T("DumpType"), dwValue);
}
else
AfxMessageBox (_T("Error creating 'LocalDumps\\<your application>.exe' key"), MB_OK);
}
为了捕获转储文件,您必须为 LocalDumps 创建子子键,该子键是应用程序的名称。在WER文档中,这部分可能并不明显。只要存在该密钥,WER就会捕获转储。然后,您可以设置 DumpCount , DumpFolder 和 DumpType 值以满足您的需求。有关这些值的更多信息,请参阅WER registry settings help。