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");
に電話すると、「よろしいですか?」というメッセージが表示されますが、inputWriter.Write("y");
と「y」と表示されてもコンソールでエコーバックされますが、何も起こりません。 私がinputWriter.WriteLine("pause");
コンソールに電話をかけると、inputWriter.Write(" ");
の後に、それはちょうどそうするべきです。
ここでの問題は何ですか。入力をコンソールとその中で実行されているアプリケーション(およびコマンド)の両方に正しくリダイレクトするにはどうすればよいですか?
ありがとうございます。
乾杯!
私が見たコンソール交換と最も近いと思うのは、POSHコンソールです。そして、はい、私は詳細を知らないが、コンソールプログラミングはclunkyであり、PowershellでもWindowsコンソールの仕組みのためにいくつかの制限があります。 –