Как закрыть другой процесс из C#
Мне нужно закрыть другой процесс (Windows Media Encoder) из приложения C#, и пока я могу сделать это с:
Process.GetProcessesByName("wmenc.exe")[0].CloseMainWindow();
Но если приложение Media Encoder выполняет потоковую передачу или запись, при выходе отображается диалоговое окно:
"Вы уверены, что хотите прекратить кодирование?"
Так есть ли способ ответить или нажать кнопку Да из кода?
[Редактировать] Многие пользователи отвечают с Process.kill()
, но это не вариант, потому что Process.Kill();
немедленно прекратит работу Windows Media Encoder, а Windows Media Encoder не завершит работу над записываемым файлом, что вынуждает меня переиндексировать видеофайл. Так что я не могу использовать Process.Kill();
3 ответа
Вот SO сообщение, которое спрашивает и отвечает, как управлять другими приложениями из.NET. Принятый ответ использует всего четыре строки кода, чтобы открыть окно и отправить нажатие клавиши на определенную кнопку в этом окне. Я думаю, что это может быть вашим лучшим выбором для аккуратного закрытия приложения.
Process[] runningProcesses = Process.GetProcesses();
foreach (Process process in runningProcesses)
{
// now check the modules of the process
foreach (ProcessModule module in process.Modules)
{
if (module.FileName.Equals("MyProcess.exe"))
{
process.Kill();
} else
{
enter code here if process not found
}
}
}
При попытке выполнить итерацию процесса module.filename получило сообщение « Ошибка отказа в доступе », однако следующий код работал нормально.
Process[] runningProcesses = Process.GetProcesses();
foreach (Process process in runningProcesses)
{
if (process.ProcessName == PROC_NAME)
process.CloseMainWindow();
}