Мне интересно, возможно ли получить связанный идентификатор процесса из процесса werfault в C#. Я не хочу отключать службу werfault, а только получить связанный (замороженный) идентификатор процесса. Я написал этот код:Как получить замороженный идентификатор процесса из процесса werfault
Process[] processes = Process.GetProcesses();
foreach (Process p in processes)
{
if (p.ProcessName.ToLower().Contains("werfault"))
{
//getting related process id?
}
}
Например: werfault service сообщает, что «programX перестала работать». Я использую приведенный выше код, чтобы найти процесс werfault, а затем убейте его и извлеките pid programX (который я не могу сделать прямо сейчас).
Я нашел частичный ответ здесь: How to launch crashing (rarely) application in subprocess, но это работает для python.
Можно ли это получить? Нужны ли мне внешние библиотеки?
Пожалуйста, объясните свой ответ – Mazz
Всякий раз, когда процесс вызывает исключение, окна начинает werfault.exe, который находится под «C:. \ Windows \ System 32 \ WerFault.exe Windows, автоматически переходит ИДП от замороженного или разбитого приложения к этому WerFault.exe, которое можно получить с помощью функции GetCommandLine. Поэтому, если вы хотите получить замороженное приложение, связанное с процессом WerFault, вам сначала нужно получить CommandLine, который имеет был передан этому WerFault.exe. Эта команда содержит идентификатор процесса замороженного/аварийного процесса. – Emphosix
Командная строка выглядит примерно так: «C: \\ Windows \\ SysWOW64 \\ WerFault.exe -u -p 5012 -s 68 " Таким образом, в этом случае 5012 будет идентификатором процесса замороженного процесса. С помощью этого идентификатора вы можете просто выполнить поиск этого конкретного процесса с помощью функции Process.GetProcessByID – Emphosix