2014-12-17 4 views
2

У меня есть часть кода C#, которая вызывает процесс, указывая на другой исполняемый файл. В некоторых редких случаях происходит нарушение прав доступа, и последнее заканчивается операционной системой с сообщением «program.exe перестает работать ... окна могут проверять онлайн-решение, бла-бла ...». Я могу убить и закрыть процесс, используя WaitForExit с предопределенным таймаутом, но указанное окно продолжает висит. Можно ли как-то его уволить?Отключить сообщение "blah.exe перестало работать". C#

код, который вызывает внешнюю программу следующим образом:

ProcessStartInfo startInfo = new ProcessStartInfo(); 
startInfo.CreateNoWindow = true; 
startInfo.UseShellExecute = false; 
startInfo.RedirectStandardError = true; 
startInfo.FileName = pathToExe; 
startInfo.ErrorDialog = false; 
startInfo.Arguments = arguments; 
string error = ""; 


using (Process exeProcess = System.Diagnostics.Process.Start(startInfo)) 
{ 
    try 
    { 
     if (!exeProcess.WaitForExit(timeout)) 
     { 
      /// timed out 
      /// clean up, set err message 
      exeProcess.Kill(); 
      error = "timed out"; 
     } 
     else if (exeProcess.ExitCode != 0) 
     { 
      /// aborted itself on error 
      /// clean up, return err message 
      error = exeProcess.StandardError.ReadToEnd(); 
     } 
     else 
     { 
      //finished correctly 
      //do some useful stuff 
     } 
    } 
    catch(Exception e) 
    { 
     error = e.Message; 
    } 
} 

ответ

2

Там есть API вызова SetErrorMode Windows, который позволяет отключить такое поведение. Однако вы не можете установить режим ошибки для другого процесса. Следовательно, это решение подразумевает, что вы контролировали исходный код «blah.exe». Полезные ответы по теме C++ и C#.

Еще одно предлагаемое решение - запустить внешнюю программу в качестве службы Windows.