2016-12-01 6 views
-1

Мой код:Определить крах исполняемого пробега по C# Process.Start()

ProcessInfo processInfo = ... 
Process proc = Process.Start(processInfo); 
proc.WaitForExit(); 
if (proc.ExitCode != 0) 
{ 
    // ... 
} 

Моя проблема заключается в том, что процесс (C++ исполняемый файл) когда-то сбой из-за необработанных исключений, при неизвестных обстоятельствах.

Я могу сказать, что исполняемый файл разбился, так как при сбое он возвращает отрицательный код выхода (или не равен нулю, если на то пошло). Однако я не могу создать дамп процесса для исследования.

Если у меня по крайней мере было сообщение «Программа перестала работать» Windows, я мог бы создать дамп вручную.

Конечно, я могу использовать программное обеспечение, например Debug Diag, для мониторинга исполняемых файлов и принятия дампа при сбое, но скорее у вас будет более общее внутреннее решение.

ответ

0

Я думаю, что это действительно так, что исполняемый файл вызывается для вывода ошибки. Wether он выводит в окно или помещает запись в средство просмотра событий и т. Д. Вплоть до рассматриваемого приложения. Вы должны иметь возможность читать выходные сообщения.

0

Вы пытались захватить вывод stdErr в дополнение к stdOut?

Например:

Process installProcess = new Process 
{ 
    StartInfo = 
    { 
     FileName = exeName, 
     Arguments = args, 
     CreateNoWindow = true, 
     UseShellExecute = false, 
     WindowStyle = ProcessWindowStyle.Hidden, 
     RedirectStandardOutput = true, 
     RedirectStandardError = true 
    } 
}; 

installProcess.Start(); 

string processStandardOutput = installProcess.StandardOutput.ReadToEnd(); 
string processStandardError = installProcess.StandardError.ReadToEnd(); 

// Check both strings for !IsNullOrEmpty and log something of interest 

installProcess.WaitForExit(); 
ExitCode = installProcess.ExitCode; 

// If ExitCode < 0, log the StandardError output...