【问题标题】:How to Close another Process from c# [duplicate]如何从c#关闭另一个进程[重复]
【发布时间】:2011-05-18 15:04:50
【问题描述】:

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

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

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

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

那么有没有办法从代码中回答或单击“是”按钮?

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

【问题讨论】:

  • 不要担心关闭任何窗口。最好寻找强制终止进程的方法。如果它打开另一个窗口怎么办?如果任何关联的窗口打开,该进程将不会退出
  • 我相信 GetProcessesByName 检索到的进程应该被处理掉,顺便说一句。 stackoverflow.com/questions/16957320/…

标签: c# process windows-media-encoder


【解决方案1】:
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】:

    遍历 ProcessModule.filename 触发了“Access denied”异常,但以下代码运行良好。

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

    【讨论】:

    • 在某些情况下它比 Kill 更好 - 例如杀死 excel 可能会损坏打开的文件,CloseMainWindow 没有这样的副作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多