我寫的是通過重定向輸入和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