после некоторых проблем, объясненных в другом вопросе, я продолжил писать приложение, имитирующее командную строку Windows. Каждая команда выполняется объектом Process, который вызывает CMD.exe / C [command] и перенаправляет свой стандартный вывод / ошибку в Winform.
Все идет хорошо, но форма падает, когда я выполняю определенные команды, такие как "time" или "wmic", которые запрашивают какое-либо взаимодействие с пользователем (RedirectStandardInput - TRUE). Как я могу решить эту проблему, заставляя курсор ждать ввода (как классическая подсказка)?
Это код
Process cmdProcess = new Process();
cmdProcess.StartInfo.FileName = "CMD.exe";
cmdProcess.StartInfo.Arguments = "/C " + command;
cmdProcess.StartInfo.WorkingDirectory = this.workingDir;
cmdProcess.StartInfo.CreateNoWindow = true;
cmdProcess.StartInfo.UseShellExecute = false;
cmdProcess.StartInfo.RedirectStandardOutput = true;
cmdProcess.StartInfo.StandardOutputEncoding = Encoding.Default;
cmdProcess.StartInfo.RedirectStandardError = true;
cmdProcess.StartInfo.StandardErrorEncoding = Encoding.Default;
//cmdProcess.StartInfo.RedirectStandardInput = true;
cmdProcess.Start();
StreamReader outputR = cmdProcess.StandardOutput;
StreamReader errorR = cmdProcess.StandardError;
//StreamWriter inputW = cmdProcess.StandardInput;
string output = outputR.ReadToEnd();
string error = errorR.ReadToEnd();
if (output.Length > 0)
this.textArea.AppendText(Environment.NewLine + output);
else if (error.Length > 0)
this.textArea.AppendErrorText(Environment.NewLine + error);
Я прокомментировал все части, которые разрешают перенаправление ввода, и теперь вывод, например, команды «time», не запрашивает ввод данных пользователем и возвращает немедленно. Очевидно, мне не нравится это поведение;)
C:\Users\Alessandro\Progetti\CMDProject\CMDProject\bin\Debug>time
Ora corrente: 19:32:17,55
Immettere nuova ora:
C:\Users\Alessandro\Progetti\CMDProject\CMDProject\bin\Debug>