如何在C#中读/写Process输入/输出

时间:2012-10-23 20:31:50

标签: c# .net process system.diagnostics

我有一个控制台应用程序,它提示我想通过Windows窗体应用程序中的System.Diagnostics.Process.Start()方法从C#调用的各种信息,但我无法让它正常工作。举一个简单的例子,我想通过Windows窗体应用程序捕获FirstName和LastName,然后像这样动态地将每个应用程序传递给控制台应用程序:

  1. 表单应用启动,用户键入firstname和lastname的值,然后单击要提交的按钮
  2. 它为控制台应用程序调用Process.Start
  3. 控制台应用会写出“输入您的名字”
  4. 表单应用程序读取此提示,确定它需要使用它收集的FirstName值进行响应并将其写入控制台应用程序的输出
  5. 控制台应用接受输入并以下一个提示“输入您的姓氏”
  6. 进行响应
  7. 表单应用程序读取此提示,确定它需要使用它收集的LastName值进行响应并将其写入控制台应用程序的输出
  8. 控制台应用程序现在拥有所需的所有信息,并以其快乐的方式继续
  9. 感谢您的任何见解,这不是我一直在努力工作的领域

2 个答案:

答案 0 :(得分:0)

在WinForms应用程序中,您可以使用Process.StandardOutput属性返回的StreamReader读取控制台应用程序的输出,并使用Process.StandardInput属性返回的StreamWriter将输入写入控制台应用程序。

顺便说一下,您是自己开发控制台应用程序(还是拥有项目文件)?如果是这样,我建议使用更好的IPC形式,例如使控制台应用程序成为EXE的DLL内容,或者使用来自WCF或类似的东西。

答案 1 :(得分:0)

查看Process.StandardOutputProcess.StandardInput以及Process.StandardError

您需要阅读Process.StandardOutput。当您阅读“'输入您的名字'”时,您将第一个名字写为Process.StandardInput,依此类推。

请注意,子进程也可以写入其StandardError,您可能需要在不同的线程中读取它,以便您可以同时读取它们

Javaexpect4j可以轻松实现这一目标。我很确定我在.net上看到了一些内容,但我现在无法找到它。

编辑:Creating a Child Process with Redirected Input and Output似乎是关于MSDN上这个主题的好文章