如何杀进程

 要利用代码杀掉指定进程,一般有两种方法:

1)Process.CloseMainWindow();这个方法可以优雅的关闭窗口。但该方法之对有窗口的程序有效,如果该程序没有主窗口,或者主窗口隐藏(例如程序最小化到了windows右下角的通知栏中),则该方法无法结束进程返回false。这个方法相当于对窗口发送关闭消息 wm_close,可以看成和手动点窗口的关闭按钮是等效的,那也意味着当主界面不响应时(例如,程序为单线程,正在执行一个耗时的操作),该函数也会返回false。在这些情况下优雅的方法不灵了,敬酒不吃吃罚酒,暴力的方法就能派上用场了。

2)Process.Kill();这是个暴力的方法,强制杀掉进程。

需要注意的时,这两种方法正确返回后,并不意味着进程已经结束了,有可能还要等1秒钟还会结束。所以如果是想重启进程的话,结束进程后立即重启,重启的进程再检测当前进程是有可能发现同名进程的。Process.WaitForExit(60000)可以使得当前进程(要结束其他进程的进程)等待Process对象所关联的进程60秒钟或者到该进程结束,这就可以用来尽量在目标进程还未结束时就启动新的进程。

 

下面是一段结束进程的代码:

private void killProc(string processName) { //得到所有打开的进程 try { //获得需要杀死的进程名 foreach (Process thisProc in Process.GetProcessesByName(processName)) { thisProc.CloseMainWindow(); thisProc.WaitForExit(60000);//等待进程结束,最多等60秒 thisProc.Refresh(); thisProc.CloseMainWindow(); if (!thisProc.HasExited) { thisProc.Kill(); thisProc.WaitForExit(60000);//等待进程结束,最多等60秒 } thisProc.Close(); } } catch (Exception Exc) { throw new Exception("杀死进程"+processName+"失败", Exc); } }

 

遗憾之处是当窗口被最小化到通知栏时,将用kill杀进程,而kill无法清除通知栏。谁有完善的解决办法?

 

你可能感兴趣的:(exception,windows,String,kill)