我无法捕获Powershell版本2的输出。 我使用常规的Process类来运行程序并处理输入和输出,一切都很好。下面的工作代码:
using (Process p = new Process())
{
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.FileName = "powershell";
//p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.OutputDataReceived += (sender, args) => AddRow(args.Data);
p.ErrorDataReceived += (sender, args) => AddRow("ERR: " + args.Data);
p.Start();
ps = p.StandardInput;
p.BeginOutputReadLine();
p.BeginErrorReadLine();
Thread.Sleep(1000);
ps.WriteLine("dir");
Thread.Sleep(100);
while (true)
{
Thread.Sleep(10);
}
}
此版本启动PowerShell并发送" dir"到进程的stdinput,结果被发送回stdout。我可以看到cmd窗口,但我不能按预期写入或看到任何输出。 (我知道我可以隐藏它。)
但后来我添加了这一行:
p.StartInfo.Arguments = "-version 2";
这是在版本2中启动powershell,现在它只打印2行,告诉我PowerShell已启动,然后连接丢失。 我在控制台窗口中看到光标闪烁,现在我可以在命令窗口中与powershell交互,因为与我的进程类的连接丢失了。当我进入"退出"在窗口中,我又回到了我的过程中。
我该如何解决这个问题?
下面的完整代码(当使用不起作用的版本2时):
using (Process p = new Process())
{
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.FileName = "powershell";
p.StartInfo.Arguments = "-version 2";
//p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.OutputDataReceived += (sender, args) => AddRow(args.Data);
p.ErrorDataReceived += (sender, args) => AddRow("ERR: " + args.Data);
p.Start();
ps = p.StandardInput;
p.BeginOutputReadLine();
p.BeginErrorReadLine();
Thread.Sleep(1000);
ps.WriteLine("dir");
Thread.Sleep(100);
while (true)
{
Thread.Sleep(10);
}
}
我希望有人可以帮助我!谢谢你的时间!