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

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


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

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

8   голосов , оценка 3.75 из 5
Похожие ответы