从我的C#应用程序运行PsList.exe并获得其输出的正确方法(或者为什么我的代码不起作用)

本文关键字:我的 方法 或者 为什么 不起作用 代码 PsList 运行 应用程序 exe 输出 | 更新日期: 2023-09-27 18:00:40

为什么这段代码只显示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();
    }
}

从我的C#应用程序运行PsList.exe并获得其输出的正确方法(或者为什么我的代码不起作用)

您可以尝试重新排列一下:

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

有许多相关的问题,例如如何从Process获取日志。重定向输出时启动和ResGen.exe停滞

取决于执行在proc上的停止方式。ExitCode行,可能是在访问ExitCode属性时进程尚未完成,然后它将抛出InvalidOperationException。

在这种情况下,您可以检查进程是否已经使用proc退出。在尝试访问ExitCode属性之前已退出