.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;
}
}