Я пишу приложение для 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(" ");
она продолжается так же, как и должна.
В чем здесь проблема и как я могу правильно перенаправить ввод как на консоль, так и на приложение (и команду)что выполняется внутри него?
Заранее спасибо.
Приветствия!