.NET 3.x Как получить строку с ошибкой при запуске стороннего приложения? - C#
Формулировка задачи:
Уважаемые программисты , прошу подсказать по теме. Создана программка, которая меняет в текстовом файле данных стороннего приложения некоторые поля и запускает это приложение с параметром в виде этого файла (это автоматизация инженерного расчета). Запускается все в отдельном потоке с помощью "System.Diagnostics.Process.Start", обрабатывается событие Exited и по результатам заново меняется файл данных и заново запускается процесс. И т.д. до получения необходимого результата.
Вопрос! Как получать ошибку запущенного стороннего приложения (все стандартно - приложение возвращает в систему "0" если завершилось нормально или какую-то другую цифру в зависимости от ошибки в приложении), Мне нужно отлавливать эту строку чтобы правильно обработать ситуацию.
Как это сделать в net?
Заранее спасибо!
Решение задачи: «.NET 3.x Как получить строку с ошибкой при запуске стороннего приложения?»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Diagnostics; public class SomeYourClass { /* some other code */ public void RunProcess() { // как-то формируем параметры запуска процесса Dictionary<string, string> runParams = ...; // создаём экземпляр runner-a ProcessRunner runner = new ProcessRunner(@"<path_to_your_exe>.exe", runParams); // создаём экземпляр делегата, запускаем его асинхронно и цепляем к нему callback продолжения Func<int> runFunction = new Func<int>(runner.StartAndWait); runFunction.BeginInvoke(new AsyncCallback(AnalyzeExitCode), runFunction); } private void AnalyzeExitCode(IAsyncResult result) { Func<int> runFunction = result.AsyncState as Func<int>; if (runFunction != null) { int exitCode = runFunction.EndInvoke(result); // тут каким-либо образом анализируем exit code внешнего процесса } } } public class ProcessRunner() { private string ExeFilePath; private Dictionary<string, string> RunParameters; public ProcessRunner(string exeFilePath, Dictionary<string, string> parameters) { ExeFilePath = exeFilePath; RunParameters = parameters; } public int StartAndWait() { ProcessStartInfo startInfo = new ProcessStartInfo(ExeFilePath) { // заполняем поля класса ProcessStartInfo из RunParameters }; Process externalProc = Process.Start(startInfo); externalProc.WaitForExit(); return externalProc.ExitCode; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д