在我的 C# 代码中,我必须运行一些外部进程。这些可以是批处理文件或可执行文件。我通过将 ProcessStartInfo
的 RedirectStandardOutput
设为 true,将输出重定向到我自己的窗口。这使得用户即使在外部进程完成后也可以查看输出。我还重定向输入,以便用户可以在必要时按键。一般来说,这非常有效。
但是,我有一个问题。某些批处理文件使用 PAUSE
命令。显然,在按下某个键之前,命令不会刷新输出。因此,用户永远不会看到提示。因此,只有在按下某个键后,用户才会看到他应该按下某个键才能继续。有没有办法让这个工作(除了“不使用暂停”)?
编辑:批处理文件运行用户的 CAM 后处理器,通常由用户(或用户的 IT 部门)创建。因此,要求更改这些文件或通过创建pause.exe进行“黑客攻击”并不是真正可行的解决方案(除非作为最后的手段)。
最佳答案
在 CMD 中,尝试
batchWithPause.bat < nul
在 C# 中,类似于:
Process.Start("batchWithPause.bat", "< nul");
编辑 所以您只是想让用户看到“按任意键继续”? 然后添加
@echo "Press any key to continue..."
每次暂停
调用之前。您还可以:
- 编写您自己的pause.bat来实现这一点
编写一个简单的pause.exe,用c#表示:
公共(public)静态无效暂停() { Console.WriteLine("按回车键继续。"); 控制台.Read(); }
编辑2我现在明白你的问题了。仅在用户按下某个键后,异步 OutputDataReceived 和 StreamReader.ReadLine() 才会读取暂停的“按任意键继续”。但是,如果您自己循环 StreamReader.Read(),您还会得到“按任意键继续”。所以这似乎是你唯一可能的路线。
关于c# - RedirectStandardOutput 和批处理文件中的暂停命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3995151/