我编写了一个自定义PowerShell主机,它提供了一个基于winforms的交互式shell。 MSDN的例子很棒,我能在几个小时内得到一些工作。
所有标准内置命令(如dir等)都按预期工作。但是,当我尝试启动另一个控制台应用程序(如FTP客户端)时,该应用程序开始将输出发送到stdout。通过将VS中的应用程序类型从Windows更改为控制台,我可以看到这一点。一旦我从交互式shell启动FTP,FTP就开始与控制台窗口通话。
之前有人解决了这个问题吗?在C ++中,我可以重定向stdin和stdout并完成它,但我没有看到在c#中执行此操作的方法。救命啊!
更新
好的,我运行的任何不是内置命令的东西都会立即开始与控制台窗口交互。
答案 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。