Как подавить диалоги из исполняемого файла, который выполняется с помощью System.Diagnostic.Process? - PullRequest
0 голосов
/ 28 сентября 2011

Я использую System.Diagnostic.Process для вызова другого .exe. Я создаю приложение, целью которого является запуск на удаленном сервере. Этот .exe иногда дает сбой, и появляется всплывающее сообщение, останавливающее весь процесс -> [Имя приложения] столкнулось с проблемой и было вынуждено закрыть. Я пытаюсь найти способ заставить мою программу на c # игнорировать это всплывающее окно и продолжить выполнение.

Ответы [ 3 ]

3 голосов
/ 28 сентября 2011

Исправление ошибки при вызове .exe не вариант?

1 голос
/ 28 сентября 2011

В том случае, если ваш процесс не работает должным образом, вы увидите всплывающее окно, которое по умолчанию Windows, но если вы хотите знать, что процесс запущен успешно или нет, то этот код будет работать для вас

Подписаться на событие Process.Exited, а затем проверить Process.ExitCode:

 public void StartProcess()
{
 p.StartInfo.FileName = BasePath;
 p.StartInfo.Arguments = args;
 p.Start();
 p.Exited += new EventHandler(Process_Exited);
}

void Process_Exited(object sender, EventArgs e)
{
var p = sender as Process;
if (p.ExitCode != 0)
    MessageBox.Show(string.Format("Process failed: ExitCode = {0}", p.ExitCode));
}
0 голосов
/ 29 сентября 2011

ИМХО, самый чистый вариант для запуска такого глючного exe-файла - запустить его, предоставив вашему процессу привилегии отладки над ним (вам, вероятно, придется явно вызывать CreateProcess через P / Invoke с флагом DEBUG_PROCESS в флагах создания процесса).) и затем обработать поток событий отладки, предоставленных WaitForDebugEvent;всякий раз, когда вы получаете необработанное исключение последнего шанса, вы можете уведомить основной поток, завершить дочерний процесс (таким образом избегая обработчик исключений Windows по умолчанию) и перезапустить его при необходимости, во всех остальных случаях просто вызовите ContinueDebugEvent чтобы программа работала нормально.

Обратите внимание, что указатель на "структуру события", предоставляемую WaitForDebugEvent, может быть сложным для работы в C #.

edit : к счастью, похоже, что кто-то сделал хорошую управляемую оболочку для нативного API отладки, см. здесь .

...