C#.NET Process类:如何将输入发送到等待输入的控制台进程?

时间:2015-03-28 21:22:25

标签: c# winapi system.diagnostics

以下情况:我们的C#WPF应用程序需要解析第三方控制台应用程序写入文件的输出。在WaitForExit()之后启动进程并解析文件很容易,但遗憾的是,应用程序编写为在输出20行后,它会停止输出并等待用户返回。是的,即使它将其输出写入文件,它仍将暂停并等待用户在写入接下来的20行之前点击返回。第三方应用程序是完全封闭的源代码,没有希望重新编译它以禁用此行为。它在另一方面也很古怪:尽管是一个控制台应用程序,它必须在它自己的目录中运行。鉴于它是旧DOS应用程序的win32端口,我想我不应该感到惊讶。

我知道通常的解决方案,如WaitForInputIdle()或hacky win32的东西,但我找不到任何适合我情况的东西。任何涉及查找打开窗口并通过win32发送输入的内容都不是我们的选择,因为控制台应用程序无法在窗口中运行。

那你觉得怎么样?我还没找到合适的win32 hack吗?也许我应该在winform中包装控制台应用程序,然后我可以使用WaitForInputIdle()?

1 个答案:

答案 0 :(得分:-2)

如果它是普通的控制台应用,只需将UseShellExecute设置为false,将RedirectStandardInput设置为true,然后使用StandardInput属性进行编写需要时换行。

使用文件是一种极其过时的方法,至少在过去20年。每当您发现自己使用它们时,您应该考虑使用现代标准输入/输出管道。