Правильный способ запустить 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.