【问题标题】:Process.WaitForExit hangs - but I only redirect standard input?Process.WaitForExit 挂起 - 但我只重定向标准输入?
【发布时间】:2020-05-11 11:01:48
【问题描述】:

我正在尝试执行一个批处理脚本,该脚本末尾包含我要确认的暂停语句:

var psi = new ProcessStartInfo(path, arguments);
psi.RedirectStandardInput = true;
psi.UseShellExecute = false;
psi.WorkingDirectory = workDir;

var p = Process.Start(psi);
p.StandardInput.WriteLine();
p.WaitForExit();

但是,尽管该过程已经完成,但此代码在 WaitForExit 中永远挂起。我知道重定向标准输出/错误时必须读取缓冲区。重定向标准输入有什么特别之处吗?

【问题讨论】:

  • 试试read input?
  • 您是否关闭了StandardInput 流?
  • 你应该有相反的问题,因为StandardInput.WriteLine() 确认 不止一次暂停。除非你设置AutoFlush= false。该批处理文件中是否只有pause 或其他内容?它是批处理(.bat、.cmd)还是不同类型的脚本?通过这些设置,您应该会在 VS 输出窗口中看到进程输出...
  • @PavelAnikhouski:是的,我忘了关闭 StandardInput!谢谢,已解决。您可以将您的评论表述为答案,然后我可以将其标记为已接受。

标签: c# .net process


【解决方案1】:

您可以参考RedirectStandardInput 文档和示例。您应该在写入一行后关闭StandardInput 流以正确处理暂停语句

p.StandardInput.WriteLine();
p.StandardInput.Close();
p.WaitForExit();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多