MiniDumpWriteDump (C#) создает файлы дампа нулевой длины для определенного процесса
Выполнение MiniDumpWriteDump в конкретном процессе обеспечивает работоспособный файл дампа.
Выполнение MiniDumpWriteDump из внешнего процесса, где hProcess и processId указывают на упомянутый конкретный процесс, предоставляет файл дампа нулевой длины
То же самое, что #2, просто указание на FireFox, например, предоставляет здоровый файл дампа
Насколько я знаю, конкретный процесс, который я пытаюсь создать, выполняется с низким уровнем привилегий, а мой внешний процесс выполняется из окна CMD администратора.
[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 возвращает false, а GetLastWin32Error возвращает: -2147024597
- Упомянутый конкретный процесс (проект сервера точка-сеть) имеет те же параметры безопасности, что и FireFox (например, дамп работает в процессе Notepad++).
1 ответ
Хорошо.. нашел решение для этого..
Проект внешнего процесса был построен для платформы AnyCPU (и, поскольку он не выполняет только 64-битные команды, он был запущен для 32-битных). Установка его в x64 позволила сбросить еще один 64-битный процесс.
И я рекомендую всем, кто сталкивается с этой проблемой, создавать отдельные проекты, один для 32-битных и один для 64-битных.