MiniDumpWriteDump (C#) 为特定进程生成零长度转储文件
MiniDumpWriteDump (C#) produces zero length dump files for specific process
在特定进程中执行 MiniDumpWriteDump 提供健康的转储文件。
从外部进程执行 MiniDumpWriteDump,其中 hProcess 和 processId 指向提到的特定进程,提供零长度转储文件
与 #2 相同,例如仅指向 FireFox 提供健康的转储文件
据我所知,我试图转储的具体进程是 运行 低权限,我的外部进程是从管理员 CMD window 执行的。
[DllImport("dbghelp.dll",
EntryPoint = "MiniDumpWriteDump",
CallingConvention = CallingConvention.Winapi,
CharSet = CharSet.Unicode,
ExactSpelling = true,
SetLastError = true)]
private static extern bool MiniDumpWriteDump(IntPtr hProcess,
uint processId,
SafeHandle hFile,
uint dumpType,
IntPtr expParam,
IntPtr userStreamParam,
IntPtr callbackParam);
备注:
- 我正在刷新、关闭并正确处理文件流
- MiniDumpWriteDump return false 和 GetLastWin32Error returns : -2147024597
- 提到的特定进程(一个点网服务器项目)具有与 FireFox 相同的安全选项(例如转储适用于 Notepad++ 进程)。
好的..找到了解决方案..
外部进程项目是为 "AnyCPU" 平台构建的(并且由于它不只执行 64 位命令,因此 运行 用于 32 位)。将其设置为 x64 可以转储另一个 64 位进程。
我建议遇到此问题的任何人创建单独的项目,一个用于 32 位,一个用于 64 位。
在特定进程中执行 MiniDumpWriteDump 提供健康的转储文件。
从外部进程执行 MiniDumpWriteDump,其中 hProcess 和 processId 指向提到的特定进程,提供零长度转储文件
与 #2 相同,例如仅指向 FireFox 提供健康的转储文件
据我所知,我试图转储的具体进程是 运行 低权限,我的外部进程是从管理员 CMD window 执行的。
[DllImport("dbghelp.dll",
EntryPoint = "MiniDumpWriteDump",
CallingConvention = CallingConvention.Winapi,
CharSet = CharSet.Unicode,
ExactSpelling = true,
SetLastError = true)]
private static extern bool MiniDumpWriteDump(IntPtr hProcess,
uint processId,
SafeHandle hFile,
uint dumpType,
IntPtr expParam,
IntPtr userStreamParam,
IntPtr callbackParam);
备注:
- 我正在刷新、关闭并正确处理文件流
- MiniDumpWriteDump return false 和 GetLastWin32Error returns : -2147024597
- 提到的特定进程(一个点网服务器项目)具有与 FireFox 相同的安全选项(例如转储适用于 Notepad++ 进程)。
好的..找到了解决方案..
外部进程项目是为 "AnyCPU" 平台构建的(并且由于它不只执行 64 位命令,因此 运行 用于 32 位)。将其设置为 x64 可以转储另一个 64 位进程。
我建议遇到此问题的任何人创建单独的项目,一个用于 32 位,一个用于 64 位。