【问题标题】:Deadlock in System.Diagnostic.ProcessSystem.Diagnostic.Process 中的死锁
【发布时间】:2016-10-26 07:58:50
【问题描述】:

我有一个小型控制台应用程序,我想用 C# 读取输出。因此我创建了这个代码 sn-p。命令提示符打开,但没有显示任何内容。

System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
process.StartInfo.FileName = DirectoryPath + "Test.exe";
process.StartInfo.Arguments = "-showAll";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
process.WaitForExit(2000);
String strOutput = process.StandardOutput.ReadToEnd();

如果我删除UseShellExecuteRedirectStandardOutput 和最后一行,命令提示符打开并显示Test.exe,但我需要输出为字符串,所以我必须使用这些属性来读取@987654325 @

我也尝试将超时设置为 2 秒 (process.WaitForExit(2000)),但空的命令提示符不会在 2 秒后关闭。

如果我在调试模式下手动关闭空命令提示符,变量 strOutput 就会包含我请求的信息。

【问题讨论】:

    标签: c# cmd process command-prompt


    【解决方案1】:

    为避免死锁,您必须在等待退出之前读取输出流。所以试试吧:

        System.Diagnostics.Process process = new System.Diagnostics.Process();
        process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
        process.StartInfo.FileName = DirectoryPath + "Test.exe";
        process.StartInfo.Arguments = "-showAll";
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardOutput = true;
        process.Start();
        String strOutput = process.StandardOutput.ReadToEnd();
        process.WaitForExit();
    

    【讨论】:

      猜你喜欢
      • 2014-08-26
      • 2020-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多