【发布时间】:2012-02-29 21:06:05
【问题描述】:
我正在编写一个 Windows 应用程序,它通过将 cmd.exe 的输入和输出重定向到文本框来模拟控制台。起始代码如下:
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");,我会收到“你确定”提示,但是当我打电话给inputWriter.Write("y"); 时,控制台会回显“y”但没有任何反应,控制台会继续等待输入。
如果我调用 inputWriter.WriteLine("pause"); 控制台暂停并在 inputWriter.Write(" "); 之后继续正常运行。
这里有什么问题,我怎样才能正确地将输入重定向到控制台和正在其中执行的应用程序(和命令)?
提前致谢。
干杯!
【问题讨论】: