Правильный способ запустить PsList.exe из моего приложения на C# и получить его вывод (или почему мой код не работает)?

Почему этот код только показывает окно cmd и никогда не достигает конца? Я хочу получить вывод из PsList в мое приложение C#. Выполнение останавливается в этой строке: "int exitCode = proc.ExitCode;"

private static void PsList()
{           
    ProcessStartInfo start = new ProcessStartInfo();            
    start.FileName = @"C:\PsList.exe";
    start.WindowStyle = ProcessWindowStyle.Hidden;
    start.CreateNoWindow = true;
    start.UseShellExecute = false;
    start.RedirectStandardOutput = true;

    using (Process proc = Process.Start(start))
    {
        proc.WaitForExit(4000);

        int exitCode = proc.ExitCode;
        string exitMsg = proc.StandardOutput.ReadToEnd();
    }
}

2 ответа

Решение

Вы можете попробовать немного переставить вещи:

using (Process proc = Process.Start(start))
{
    string exitMsg = proc.StandardOutput.ReadToEnd();
    proc.WaitForExit(4000);

    int exitCode = proc.ExitCode;
}

Есть много связанных вопросов, таких как Как получить журнал из Process.Start и ResGen.exe зависает при перенаправлении вывода

В зависимости от того, как именно выполнение останавливается в строке proc.ExitCode, может случиться так, что процесс не будет завершен к моменту доступа к свойству ExitCode, и затем он выдаст исключение InvalidOperationException.

В этом случае вы можете проверить, завершился ли процесс с помощью proc.HasExited, прежде чем пытаться получить доступ к свойству ExitCode.

Другие вопросы по тегам