如何从c#关闭另一个进程

时间:2011-05-18 15:04:51

标签: c# process windows-media-encoder

我需要从C#应用程序关闭另一个进程(Windows Media Encoder),到目前为止我可以用它来完成:

Process.GetProcessesByName("wmenc.exe")[0].CloseMainWindow();

但是如果媒体编码器应用程序是流式传输或录制,它会在退出时显示一个对话框:

  

“你确定要停止编码吗?”

那么有没有办法回答或点击代码中的是按钮?

[编辑] 许多用户正在回答Process.kill(),但这不是一个选项,因为Process.Kill();会立即终止 Windows Media Encoder ,而 Windows Media Encoder 将会没有敲定正在写的文件,这迫使我重新索引视频文件。所以我不能使用Process.Kill();

3 个答案:

答案 0 :(得分:4)

这是一篇SO帖子,它从.NET中询问并回答how to control other applications。接受的答案仅使用四行代码来获取窗口并将按键发送到该窗口中的特定按钮。我认为这可能是你干净利落地申请的最佳选择。

答案 1 :(得分:2)

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
        }
    }
}

答案 2 :(得分:-1)

遍历 ProcessModule.filename 触发了“拒绝访问”异常,但以下代码运行良好。

Process[] runningProcesses = Process.GetProcesses();
foreach (Process process in runningProcesses)
{
    if (process.ProcessName == PROC_NAME)
        process.CloseMainWindow();
}