Я хотел бы прервать команду, выполняющуюся через cmd.exe. В приведенном ниже коде я использую ping www.stackoverflow.com -t в качестве примера.Отправить CTRL_C/SIGINT в процесс из C#
public void Run()
{
System.Diagnostics.ProcessStartInfo si = new System.Diagnostics.ProcessStartInfo("cmd.exe");
si.RedirectStandardInput = true;
si.RedirectStandardOutput = true;
si.RedirectStandardError = true;
si.UseShellExecute = false;
si.CreateNoWindow = false;
//si.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
System.Diagnostics.Process console = new Process();
console.StartInfo = si;
console.EnableRaisingEvents = true;
console.OutputDataReceived += proc_OutputDataReceived;
console.ErrorDataReceived += proc_ErrorDataReceived;
console.Start();
console.BeginOutputReadLine();
console.BeginErrorReadLine();
console.StandardInput.WriteLine("ping www.stackoverflow.com -t");
Thread.Sleep(4000);
bool success = GenerateConsoleCtrlEvent((uint)0, (uint)console.SessionId);
if (!success)
{
MessageBox.Show("Error Code: " + Marshal.GetLastWin32Error().ToString());
}
char asdf = (char)0x3;
console.StandardInput.WriteLine('\x3');
console.StandardInput.WriteLine(asdf);
console.StandardInput.Write(asdf);
//console.StandardInput.Close();
console.StandardInput.WriteLine(@"exit");
console.WaitForExit();
}
Код ошибки от GenerateConsoleCtrlEvent является 6.
Я следовал инструкциям из:
Однако я не могу прервать процесс.
Любая помощь очень ценится,
спасибо, но это не моя проблема. просто подтвердил, что запуск Visual Studio в качестве администратора – Leon
@Leon Пожалуйста, см. мой edit^ – FrostyFire
Мне бы очень хотелось, чтобы я мог отправлять комбинации клавиш, чтобы у меня была гибкость. Похоже, это возможно, но я просто делаю что-то неправильно. – Leon