【发布时间】:2015-03-28 21:22:24
【问题描述】:
情况如下:我们的 C# WPF 应用程序需要解析第 3 方控制台应用程序写入文件的输出。在 WaitForExit() 之后启动进程并解析文件会很容易,但不幸的是,该应用程序是这样编写的,在 20 行输出后,它会停止输出并等待用户点击返回。是的,即使它将输出写入文件,它仍然会暂停并等待用户在写入接下来的 20 行之前点击返回。第 3 方应用程序是完全闭源的,没有希望重新编译它以禁用此行为。它在另一个方面也很奇怪:尽管它是一个控制台应用程序,但它必须在它自己的目录中运行。鉴于它是旧 DOS 应用程序的 win32 端口,我想我不应该感到惊讶。
我知道通常的解决方案,例如 WaitForInputIdle() 或 hacky win32 的东西,但我真的找不到任何适合我的情况。任何涉及找到打开的窗口并通过 win32 发送输入的事情都不适合我们,因为控制台应用程序无法在窗口中运行。
那你怎么看?我还没有找到合适的 win32 hack 吗?也许我应该将控制台应用程序包装在一个 winform 中,然后我可以使用 WaitForInputIdle()?
【问题讨论】:
-
澄清:当我说控制台应用程序“不能在窗口中运行”时,我的意思是我们不允许将 ProcessStartInfo.CreateNoWindow 设置为 false。那会“破坏用户体验”。
-
那行不通,当你有这个小小的控制权时,你需要将你的要求降低到合理的程度。
标签: c# winapi system.diagnostics