C#Powershell主机,捕获已启动的控制台应用程序的输出

时间:2010-08-05 23:16:33

标签: c#

我编写了一个自定义PowerShell主机,它提供了一个基于winforms的交互式shell。 MSDN的例子很棒,我能在几个小时内得到一些工作。

所有标准内置命令(如dir等)都按预期工作。但是,当我尝试启动另一个控制台应用程序(如FTP客户端)时,该应用程序开始将输出发送到stdout。通过将VS中的应用程序类型从Windows更改为控制台,我可以看到这一点。一旦我从交互式shell启动FTP,FTP就开始与控制台窗口通话。

之前有人解决了这个问题吗?在C ++中,我可以重定向stdin和stdout并完成它,但我没有看到在c#中执行此操作的方法。救命啊!

更新

好的,我运行的任何不是内置命令的东西都会立即开始与控制台窗口交互。

2 个答案:

答案 0 :(得分:1)

检查一下,也许它可以帮助

    Process p = new Process();
    p.StartInfo.FileName = "netstat";
    p.StartInfo.Arguments = "-a";
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.UseShellExecute = false;
    p.Start();
    System.Diagnostics.Debug.WriteLine(p.StandardOutput.ReadToEnd());

答案 1 :(得分:1)

我终于找到了一个有效的例子here!虽然它不使用.NET框架中的Powershell类,但它完全符合我的需要,包括从已启动的控制台应用程序成功捕获io。