@alex_tol

Чтение из StandardOutput запущенного Process, возникает ошибка?

Задача такова: необходимо из одного приложения запустить консольное приложение, и считать все что оно выводит

Ниже максимально упрощенный код, который воспроизводит эту задачу

Консольное приложение
static void Main(string[] args)
{
    foreach (string arg in args)
        Console.WriteLine(arg);

    Console.ReadKey(); // проблема из-за этого
}


приложение, которое считывает
static void Main(string[] args)
{
    Process process = new Process
    {
        StartInfo = new ProcessStartInfo
        {
            FileName = "App.exe",
            Arguments = "1 2 3 4 5",
            CreateNoWindow = true,
            UseShellExecute = false,
            RedirectStandardOutput = true
        }
    };

    process.Start();

    Console.WriteLine(process.StandardOutput.ReadToEnd());

    Console.ReadKey();
}


Так вот из-за того, что первое приложение ожидает нажатия клавиши, оно вылетает и появляется окно с ошибкой, проблема в том, что возможности изменить первое приложение нет, поэтому возникает вопрос, можно ли как то избежать данной проблемы? Проблема именно в появлении окна с ошибкой, так как после закрытия этого окна в итоге выводится то что нужно

Ну и возникающая ошибка: Additional information: Невозможно считывать клавиши, когда любое приложение не имеет консоли или ввод данных на консоли был переадресован из файла. Попробуйте использовать Console.Read.
  • Вопрос задан
  • 1193 просмотра
Решения вопроса 1
@alex_tol Автор вопроса
В общем, решил проблему извлечением исходного кода первой программы через dotPeek (повезло, что она была написана тоже на шарпе). И закомментировал Console.ReadKey(); // проблема из-за этого
Другого решения этой проблемы не нашел
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Sumor
RedirectStandardOutput вы переопределили, а RedirectStandardInput нет. поэтому у процесса нет открытого потока для чтения. Укажите RedirectStandardInput = true при создании процесса.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы