.NET 3.x Как получить строку с ошибкой при запуске стороннего приложения? - C#

Узнай цену своей работы

Формулировка задачи:

Уважаемые программисты , прошу подсказать по теме. Создана программка, которая меняет в текстовом файле данных стороннего приложения некоторые поля и запускает это приложение с параметром в виде этого файла (это автоматизация инженерного расчета). Запускается все в отдельном потоке с помощью "System.Diagnostics.Process.Start", обрабатывается событие Exited и по результатам заново меняется файл данных и заново запускается процесс. И т.д. до получения необходимого результата. Вопрос! Как получать ошибку запущенного стороннего приложения (все стандартно - приложение возвращает в систему "0" если завершилось нормально или какую-то другую цифру в зависимости от ошибки в приложении), Мне нужно отлавливать эту строку чтобы правильно обработать ситуацию. Как это сделать в net? Заранее спасибо!

Решение задачи: «.NET 3.x Как получить строку с ошибкой при запуске стороннего приложения?»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4.  
  5. public class SomeYourClass
  6. {
  7.     /* some other code */
  8.    
  9.     public void RunProcess()
  10.     {
  11.         // как-то формируем параметры запуска процесса
  12.         Dictionary<string, string> runParams = ...;
  13.        
  14.         // создаём экземпляр runner-a
  15.         ProcessRunner runner = new ProcessRunner(@"<path_to_your_exe>.exe", runParams);
  16.        
  17.         // создаём экземпляр делегата, запускаем его асинхронно и цепляем к нему callback продолжения
  18.         Func<int> runFunction = new Func<int>(runner.StartAndWait);
  19.         runFunction.BeginInvoke(new AsyncCallback(AnalyzeExitCode), runFunction);
  20.     }
  21.  
  22.     private void AnalyzeExitCode(IAsyncResult result)
  23.     {
  24.         Func<int> runFunction = result.AsyncState as Func<int>;
  25.         if (runFunction != null)
  26.         {
  27.             int exitCode = runFunction.EndInvoke(result);
  28.            
  29.             // тут каким-либо образом анализируем exit code внешнего процесса
  30.         }
  31.     }
  32. }
  33.  
  34. public class ProcessRunner()
  35. {
  36.     private string ExeFilePath;
  37.     private Dictionary<string, string> RunParameters;
  38.    
  39.     public ProcessRunner(string exeFilePath, Dictionary<string, string> parameters)
  40.     {
  41.         ExeFilePath = exeFilePath;
  42.         RunParameters = parameters;
  43.     }
  44.    
  45.     public int StartAndWait()
  46.     {
  47.         ProcessStartInfo startInfo = new ProcessStartInfo(ExeFilePath)
  48.         {
  49.             // заполняем поля класса ProcessStartInfo из RunParameters
  50.         };
  51.        
  52.         Process externalProc = Process.Start(startInfo);
  53.        
  54.         externalProc.WaitForExit();
  55.        
  56.         return externalProc.ExitCode;
  57.     }
  58. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.75 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы