Я пишу класс оболочки для исполняемого файла командной строки. Этот exe принимает ввод от stdin, пока я не нажму ctrl + c в командной строке командной оболочки, и в этом случае он выводит результат на основе ввода в stdout. Я хочу, чтобы имитировать, что ctrl + c нажмите в коде C#, отправив команду kill в объект процесса. Net. Я попытался вызвать Process.kill(), но это, похоже, не дает мне ничего в стандартном потоке StreamReader процесса. Может быть, я ничего не сделаю? Вот код, который я пытаюсь использовать:Как отправить ctrl + c процессу в C#?
ProcessStartInfo info = new ProcessStartInfo(exe, args);
info.RedirectStandardError = true;
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
Process p = Process.Start(info);
p.StandardInput.AutoFlush = true;
p.StandardInput.WriteLine(scriptcode);
p.Kill();
string error = p.StandardError.ReadToEnd();
if (!String.IsNullOrEmpty(error))
{
throw new Exception(error);
}
string output = p.StandardOutput.ReadToEnd();
Однако выход всегда пуст, даже если я получаю данные от стандартного вывода при запуске еха вручную. редактирования: это C# 2,0 BTW
Обратите внимание, что он работает только в том случае, если процесс пытается прочитать со стандартного ввода. Закрытие stdin ничего не делает, пока программа не попытается что-то прочитать. – Doug 2013-03-12 23:00:50