Не окончательный ответ, но он должен помочь, по крайней мере, немного:
Прежде всего, объявите этот процесс вне вашей процедуры Log, чтобы он не выходил за рамки, когда вы хотите больше регистрироваться.
В любом случае я попробовал следующее:
Process process = Process.Start(new ProcessStartInfo("cmd.exe", "/K more") {
UseShellExecute = false,
RedirectStandardInput = true,
RedirectStandardError = true,
RedirectStandardOutput = false
});
private void button1_Click(object sender, EventArgs e) {
Log("Button has been pressed");
MessageBox.Show(process.StandardError.ReadToEnd());
}
private void Log(string message) {
process.StandardInput.WriteLine(message);
}
После нажатия кнопки ваше приложение будет зависать (оно ожидает закрытия консоли, ReadToEnd буквально читает до конца).Когда вы закрываете консоль, вы получите сообщение с выводом ошибки:
The handle is invalid.
The handle is invalid.
The handle is invalid.
'Button' is not recognized as an internal or external command,
operable program or batch file.
The handle is invalid.
The handle is invalid.
Кажется, что невозможно перенаправить только вход без перенаправления вывода при запуске CMD.Я не уверен, почему, может быть, попытка различных параметров командной строки поможет.Я также попытался удалить команду «Больше» и записать в журнал «dir»:
Log("dir");
Результат был немного пугающим:
The handle is invalid.
...
There is not enough space on the disk.
The handle is invalid.
The handle is invalid.
Интересно, должен сказать!Похоже, вы открыли банку с червями: -)