Почему 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) приводит к появлению этого сообщения об ошибке:
но я не хочу, чтобы это окно сообщения отображалось. Если в вызванном exe есть ошибка, я хочу обработать ее самостоятельно, я не знаю, откуда это окно сообщения об ошибке.
Это сообщение появляется прямо из начатого процесса. Вы можете проверить, есть ли в вашем режиме "консольный" режим работы - попробуйте запустить его из командной строки с помощью опции для справки - ("/?", "/Help",...) или обратитесь в службу поддержки компания, которая разработала приложение.
Если это приложение для дома или у вас есть доступ к исходному коду - вы можете изменить его и реализовать консольный режим самостоятельно. Есть хорошо известные методы, как это сделать - я не буду описывать их здесь, так как это будет другой вопрос :)
Если нет консольного режима, и у вас нет доступа к суровому коду, - этот процесс просто не предназначен для использования подобным образом, и вам не повезло. Конечно, вы можете убедиться, что действительная лицензия найдена, и окно сообщения не отображается, но некоторое другое окно сообщения может появиться позже.
Ну, процесс, который вы запускаете, показывает окно с ошибкой. Нет ничего чистого, что вы можете с этим поделать. Это из вашей досягаемости.
Поле сообщения существует в отдельном отдельном потоке сообщений в совершенно другом процессе. Это не имеет никакого отношения к вам с помощью Process.Start
- если вы запустите exe с помощью Windows Explorer
, он все равно покажет этот диалог. Если у вас есть файл лицензии, убедитесь, что WorkingDirectory
в правильную папку (если приложение действительно читает лицензию из файла) - это может решить вашу проблему.
Перенаправление стандартного вывода будет делать именно то, что он говорит - он перенаправит стандартный выходной канал. Это в основном Console.WriteLine
/ReadLine
- ничего не делает с графическим интерфейсом.
Точно так же "стандартная ошибка" - это просто еще одна труба. Очевидно, приложение не использует его для вывода ошибок. Это тоже не требуется, и он мало используется в приложениях с графическим интерфейсом.
В действительности, как стандартный вывод, так и стандартная ошибка - это функции приложений командной строки, а не графических приложений. Если приложение не предназначено для работы из командной строки, вы не собираетесь это делать :)
О, и когда вы перенаправляете стандартный вывод/ошибку, вы должны его прочитать. В противном случае, если они используются приложением, их буферы будут заполнены, и приложение замерзнет :)