我写的是通过重定向输入和CMD.EXE的输出到一个文本框模拟控制台Windows应用程序。起始代码如下:控制台重定向输入
StreamWriter inputWriter;
StreamReader outputReader;
StreamReader errorReader;
Process proc = new Process();
byte[] outputBuffer = new byte[1024];
byte[] errorBuffer = new byte[1024];
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.Arguments = "/Q";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.ErrorDialog = false;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
inputWriter = proc.StandardInput;
outputReader = proc.StandardOutput;
errorReader = proc.StandardError;
outputReader.BaseStream.BeginRead(outputBuffer, 0, outputBuffer.Length, ShowOutput, null);
errorReader.BaseStream.BeginRead(errorBuffer, 0, errorBuffer.Length, ShowError, null);proc.StartInfo.Arguments = "/Q";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.ErrorDialog = false;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
inputWriter = proc.StandardInput;
outputReader = proc.StandardOutput;
errorReader = proc.StandardError;
outputReader.BaseStream.BeginRead(outputBuffer, 0, outputBuffer.Length, ShowOutput, null);
errorReader.BaseStream.BeginRead(errorBuffer, 0, errorBuffer.Length, ShowError, null);
当我启动该程序时,我能够读取控制台输出并通过写入输入流来发送命令。
当我启动某些应用这种方式,应用程序的输出也被重新定向,一切仍然正常工作,但应用程序似乎并没有收到被写入输入流中的数据。甚至有些控制台命令也无法接收输入。 例如如果我拨打inputWriter.WriteLine("del *.log");
,我会收到“Are you sure”提示,但当我拨打inputWriter.Write("y");
时,控制台会回显“y”,但没有任何反应,控制台将继续等待输入。 如果我打电话inputWriter.WriteLine("pause");
控制台暂停,并且在inputWriter.Write(" ");
之后它继续。
这里有什么问题,我该如何正确输入重定向到控制台和正在其内执行的应用程序(命令)两者兼而有之?
在此先感谢。
干杯!
最近想到的控制台替换我见过的是POSH控制台。是的,我不知道细节,但控制台编程是笨重的,即使Powershell有一些限制,因为Windows控制台的工作方式。 – 2012-02-29 21:29:53