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

Почему этот код показывает только окно 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 ]

3 голосов
/ 29 июня 2011

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

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

    int exitCode = proc.ExitCode;
}

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

0 голосов
/ 29 июня 2011

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

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

...