1

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

  1. 表单应用程序启动,用户键入名字和姓氏的值,然后单击按钮提交
  2. 它为控制台应用程序调用 Process.Start
  3. 控制台应用程序写出“输入您的名字”
  4. Forms 应用程序读取此提示,确定它需要使用它收集的 FirstName 值进行响应,并将其写入控制台应用程序的输出
  5. 控制台应用程序接受输入并响应下一个提示“输入您的姓氏”
  6. Forms 应用程序读取此提示,确定它需要使用它收集的 LastName 值进行响应,并将其写入控制台应用程序的输出
  7. 控制台应用程序现在拥有它需要的所有信息并继续其愉快的方式

感谢您的任何见解,这根本不是我与之合作过的领域

4

2 回答 2

0

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

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

于 2012-10-23T20:45:40.733 回答
0

Process.StandardOutputProcess.StandardInputProcess.StandardError

您需要从Process.StandardOutput. 当你读到“'输入你的名字””然后你写名字Process.StandardInput等等。

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

Java那里expect4j,这很容易。我很确定我在 .net 上看到了一些东西,但我现在无法找到它。

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

于 2012-10-23T20:46:06.457 回答