Как закрыть другой процесс из 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();
}
Другие вопросы по тегам