Duplicar posible:
How do I send ctrl+c to a process in c#?C#: enviar ctrl + c al programa de la consola iniciado con Process.Start()?
no puedo encontrar la manera de simular el envío de Ctrl +C a un programa externo. Cuando ejecuto el programa manualmente a través de CMD, cuando presiono Ctrl + c, abortará y me preguntará si deseo guardar antes de que se cierre por completo. Intento simular esto a través de C#, pero parece que no funciona.
Esto es lo que estoy haciendo ahora:
// Create new process object
process = new Process();
// Setup event handlers
process.EnableRaisingEvents = true;
process.OutputDataReceived += OutputDataReceivedEvent;
process.ErrorDataReceived += ErrorDataReceivedEvent;
process.Exited += ProgramExitedEvent;
// Setup start info
ProcessStartInfo psi = new ProcessStartInfo
{
FileName = ExePath,
UseShellExecute = false, // Must be false to redirect IO
RedirectStandardOutput = false,
RedirectStandardError = false,
RedirectStandardInput = true,
Arguments = arguments
};
process.StartInfo = psi;
// Start the program
process.Start();
process.StandardInput.Write("\x3"); // 0x3 is Ctrl+C according to ASCII table
El programa no responde a esto y simplemente continúa. ¿El problema es que Windows realidad no envía Ctrl +C a la corriente de entrada al hacer Ctrl +c en la consola, sino que envía una "interrupción" en el proceso? Pensé que enviar "\ x3" a la secuencia de entrada es EXACTAMENTE lo que hace Windows cuando se presiona Ctrl + c en la consola. ¿Me equivoco?
Su consola probablemente está capturando el '^ C' y enviando una señal de algún tipo al programa. Necesitas emular ese comportamiento; en los sistemas Unixy sería 'SIGINT', no sé mucho sobre windows, me temo. –
Esta es una de mis teorías también. No sé qué CMD en Windows está enviando a mi programa (si no es ctrl + c). – johnrl