. NET standardOut не перенаправляется - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть часть кода, где мне нужно запустить консольное приложение из моего консольного приложения. NET и получить его вывод, а в лучшем случае также распечатать этот вывод. Но я получаю сообщение об ошибке:

StandardOut не был перенаправлен или процесс еще не начался

У меня RedirectStandardOutput установлено значение true и поток в соответствии с журналом запущен (я распечатал "чтение началось").

Я прилагаю проблемные c фрагменты кода ниже. Кто-нибудь понял, где проблема? Буду благодарен за любые полезные советы.

Thread readingThread = new Thread(Read);

ProcessStartInfo info = new ProcessStartInfo()
                    {
                        RedirectStandardOutput = true,
                        RedirectStandardError = true,
                        UseShellExecute = false,
                        CreateNoWindow = true,
                        FileName = "../../" + path + "/server_run.sh",
                    };

info.RedirectStandardOutput = true;
info.UseShellExecute = false;
info.FileName = "../../" + path + "/server_run.sh";

using (Process server = Process.Start(info))
{
    readingThread.Start(server);
    Console.WriteLine("Starting the server");
    int serverNumber = serverPaths.FindIndex(x => x == path); 
    Console.WriteLine(serverNumber);
    serverNumbers.Insert(serverNumber, server.Id);
    int i = 0;

    foreach (int a in serverNumbers)
    {
        Console.WriteLine("index: " + i + " " + a);
        i++;
    }

    //////////////string ProcessID;
    Console.WriteLine(server.Id.ToString()); ////////////////

    Console.WriteLine("Server started");
}

readingThread.Join();

private static void Read(object parameter)
{
    Console.WriteLine("read started");

    Process process = parameter as Process;
    process.BeginOutputReadLine();
    process.OutputDataReceived += new DataReceivedEventHandler(MyProcOutputHandler);
}

private static void MyProcOutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
    // Collect the sort command output. 
    if (!String.IsNullOrEmpty(outLine.Data))
    {
        Console.WriteLine(outLine.Data);
    }
}
...