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

Bur*_*imi 15 c# process windows-media-encoder

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

Process.GetProcessesByName("wmenc.exe")[0].CloseMainWindow();
Run Code Online (Sandbox Code Playgroud)

但是如果Media Encoder Application是Streaming或Recording,它会在退出时显示一个Dialog:

"你确定要停止编码吗?"

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

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

Mar*_*tin 6

迭代 ProcessModule.filename 触发了“访问被拒绝”异常,但是以下代码工作正常。

Process[] runningProcesses = Process.GetProcesses();
foreach (Process process in runningProcesses)
{
    if (process.ProcessName == PROC_NAME)
        process.CloseMainWindow();
}
Run Code Online (Sandbox Code Playgroud)

  • 在某些情况下,它比 Kill 更好 - 例如杀死 excel 可能会损坏打开的文件,CloseMainWindow 没有这样的副作用 (2认同)

小智 5

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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)