Есть несколько разных вариантов. Я бы предложил, чтобы ваше приложение отслеживало процессы, которые оно запускает:
private Stack<Process> _startedProcesses = new Stack<Process>();
private void StartChildProcess(string fileName)
{
Process newProcess = new Process();
newProcess.StartInfo = new ProcessStartInfo(fileName); ;
newProcess.Start();
_startedProcesses.Push(newProcess);
}
Когда приложение закрывается, вы можете вызвать метод, который закроет все запущенные дочерние процессы, которые все еще работают. Вы можете использовать это либо с методом Kill, либо вызывая методы CloseMainWindow и Close. CloseMainWindow / Close выполнит более изящное закрытие (если вы запустите Notepad, если есть несохраненные изменения, Kill потеряет их, CloseMainWindow / Close заставит блокнот спросить, хотите ли вы сохранить):
private void CloseStartedProcesses()
{
while (_startedProcesses.Count > 0)
{
Process process = _startedProcesses.Pop();
if (process != null && !process.HasExited)
{
process.CloseMainWindow();
process.Close();
}
}
}