Почему Process.Start отображает окно с сообщением об ошибке, хотя я перенаправляю стандартную ошибку?

1

Почему Process.Start показывает окно с сообщением об ошибке, хотя я перенаправляю стандартную ошибку?

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.Arguments = Optimizer.GetArgumentsString();
startInfo.FileName = ProjectSettings.OptimizerExe;
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = false;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;


process = System.Diagnostics.Process.Start(startInfo);
string output = process.StandardOutput.ReadToEnd();
string outpute = process.StandardError.ReadToEnd();
process.WaitForExit();

Вызов System.Diagnostics.Process.Start(startInfo) приводит к появлению этого сообщения об ошибке:

Изображение 174551

но я не хочу, чтобы это окно сообщения отображалось. Если в вызванном exe есть ошибка, я хочу обработать ее самостоятельно, я не знаю, откуда это окно сообщения об ошибке.

Теги:

2 ответа

4

Это сообщение появляется прямо из начатого процесса. Вы можете проверить, есть ли в вашем режиме "консольный" режим работы - попробуйте запустить его из командной строки с помощью опции для справки - ("/?", "/Help",...) или обратитесь в службу поддержки компания, которая разработала приложение.

Если это приложение для дома или у вас есть доступ к исходному коду - вы можете изменить его и реализовать консольный режим самостоятельно. Есть хорошо известные методы, как это сделать - я не буду описывать их здесь, так как это будет другой вопрос :)

Если нет консольного режима, и у вас нет доступа к суровому коду, - этот процесс просто не предназначен для использования подобным образом, и вам не повезло. Конечно, вы можете убедиться, что действительная лицензия найдена, и окно сообщения не отображается, но некоторое другое окно сообщения может появиться позже.

2

Ну, процесс, который вы запускаете, показывает окно с ошибкой. Нет ничего чистого, что вы можете с этим поделать. Это из вашей досягаемости.

Поле сообщения существует в отдельном отдельном потоке сообщений в совершенно другом процессе. Это не имеет никакого отношения к вам с помощью Process.Start - если вы запустите exe с помощью Windows Explorer, он все равно покажет этот диалог. Если у вас есть файл лицензии, убедитесь, что WorkingDirectory в правильную папку (если приложение действительно читает лицензию из файла) - это может решить вашу проблему.

Перенаправление стандартного вывода будет делать именно то, что он говорит - он перенаправит стандартный выходной канал. Это в основном Console.WriteLine/ReadLine - ничего не делает с графическим интерфейсом.

Точно так же "стандартная ошибка" - это просто еще одна труба. Очевидно, приложение не использует его для вывода ошибок. Это тоже не требуется, и он мало используется в приложениях с графическим интерфейсом.

В действительности, как стандартный вывод, так и стандартная ошибка - это функции приложений командной строки, а не графических приложений. Если приложение не предназначено для работы из командной строки, вы не собираетесь это делать :)

О, и когда вы перенаправляете стандартный вывод/ошибку, вы должны его прочитать. В противном случае, если они используются приложением, их буферы будут заполнены, и приложение замерзнет :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню