Eventuali duplicati:
How do I send ctrl+c to a process in c#?C#: invia ctrl + c al programma della console avviato con Process.Start()?
io non riesco a capire come simulare l'invio di Ctrl +C ad un programma esterno. Quando eseguo il programma manualmente tramite CMD, quando preme Ctrl + c, si interrompe e mi chiede se voglio salvare prima che si chiuda completamente. Sto cercando di simulare questo attraverso C# ma non sembra funzionare.
Questo è quello che sto facendo ora:
// 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
Il programma non risponde a questa e solo continua. Il problema è che Windows in realtà non invia Ctrl +C al flusso in ingresso quando si fa Ctrl +c nella console, ma invece invia un "interrupt" per il processo? Ho pensato che l'invio di "\ x3" al flusso di input è ESATTAMENTE quello che fa Windows quando si preme Ctrl + c nella console. Ho sbagliato?
La tua console sta probabilmente prendendo il '^ C' e sta inviando un segnale di qualche tipo al programma. È necessario emulare tale comportamento; sui sistemi Unix sarebbe 'SIGINT', non ne so molto di Windows, temo. –
Questa è anche una delle mie teorie. Non so cosa CMD su Windows invii al mio programma (se non è ctrl + c). – johnrl