将控制台输出重定向到另一个应用程序

所以说我运行我的程序:

Process proc = new Process(); proc.StartInfo.FileName = Path.GetDirectoryName(Application.ExecutablePath) + @"\Console.exe"; proc.Start(); 

然后希望将我的控制台流输出到此应用程序,我将如何进行此操作? 所以说我有:

 Console.WriteLine("HEY!"); 

我想要在程序中显示我运行的控制台。 我知道我必须使用重定向输出

 Console.SetOut(TextWriter); 

但我不知道如何让它写入其他程序。

如果我使用RedirectStandardInput从Console.exe运行我的主程序,我可以看到如何做到这一点但是这并没有真正帮助:P

RedirectStandardInput使Console.exe从您可以在主程序中访问的流中获取其输入。 您可以直接写入该流,也可以使用SetOut重定向控制台输出…

 Process proc = new Process(); proc.StartInfo.FileName = Path.GetDirectoryName(Application.ExecutablePath) + @"\Console.exe"; proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardInput = true; proc.Start(); proc.StandardInput.WriteLine("Hello"); Console.SetOut(proc.StandardInput); Console.WriteLine("World"); 

编辑

Console.exe可能无法很好地处理将数据传输到其中而不是以交互方式输入。 您可以从命令行中查看此类似的内容

 echo "Hello" | Console.exe 

如果这不符合您的预期,重定向程序的输出也不会。 要测试您的程序而不必担心目标程序,您可以尝试

 proc.StartInfo.FileName = @"cmd"; proc.StartInfo.Arguments = @"/C ""more"""; 

如果显示您写入的文本,则问题出在接收端。

RedirectStandardInput不是问题。 Console是问题所在。

  StreamWriter myConsole = null; if (redirect) { Process proc = new Process(); proc.StartInfo.FileName = Path.GetDirectoryName(Application.ExecutablePath) + @"\Console.exe"; proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardInput = true; proc.Start(); myConsole = myProcess.StandardInput; } else myConsole = Console.Out; 

然后就像使用Console.一样使用myConsole Console.

您需要使用Process.StandardOutput和Process.StandardInput。 查看MSDN上的这篇文章,这可能有助于您指明正确的方向: http : //msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx

顺便说一句,这里可以找到一种更简单的方法来做你正在做的事情,作为类似SO问题的公认答案: c#redirect(pipe)进程输出到另一个进程