1

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

2 回答 2

3

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

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

    int exitCode = proc.ExitCode;
}

有许多相关问题,例如如何从 Process.Start 获取日志ResGen.exe 在重定向输出时卡住

于 2011-06-28T22:21:49.280 回答
0

根据 proc.ExitCode 行上执行停止的准确程度,可能是在访问 ExitCode 属性时进程尚未完成,然后它将抛出 InvalidOperationException。

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

于 2011-06-28T22:30:09.467 回答