在C#中杀死正在运行的进程的替代方法

时间:2011-07-16 20:39:43

标签: c# .net windows

我在尝试终止进程时遇到了一些麻烦,我发现单独在这个站点上有相当多的资源,但我想知道是否有任何替代方法来终止应用程序而不是典型的例如:

    Process[] procs = Process.GetProcessesByName("test.exe");
    foreach (Process proc in procs)
        proc.Kill(); 

4 个答案:

答案 0 :(得分:2)

Process.CloseMainWindow,它很好地要求退出流程(而不是Process.Kill,这会导致流程失效并产生负面影响)。

答案 1 :(得分:1)

C#中只有两种方法可以使用Process.Kill()和Process.CloseMainWindow()关闭进程(AFAIK),Kill立即向应用程序发送一个KILL信号并强制它立即关闭。 CloseMainWindow使用SendWindowMessage将CLOSE信号发送到主应用程序。杀死可能不安全,因为它会立即停止进程。 CloseMainWindow后面跟着Process.WaitForExit,这样你就可以确定应用程序已经关闭,并且可以继续工作,因为知道你告诉退出的进程已经正确退出。正如海因兹的评论所发表的那样,请稍微具体一点,我只是想扩大所说的内容,希望这是你所需要的。

答案 2 :(得分:0)

这个想法并不好。可能存在具有该名称的另一个正在运行的进程。您是否希望终止具有该名称的任何进程?除非您正在编写任务管理器/ Process Explorer类应用程序,否则不应该这样做。即使使用TM类型的应用程序,也可以通过抓取其句柄/ Process对象而不是按名称来关闭该进程。

你不能让目标进程优雅地关闭吗?可能是你可以使用一个命名的互斥锁,目标线程会等待那个互斥锁。当您从另一个进程发出named-mutex信号时,目标线程将知道是时候退出并最终退出。

答案 3 :(得分:0)

非常简单,只需要获取流程名称并将其删除,不要尝试做任何花哨的事情,有时候会更少...

Process[] prs = Process.GetProcesses();


foreach (Process pr in prs)
{
if (pr.ProcessName == "test")
{

pr.Kill();

}

}