怎样关闭一个指定的进程

时间:2021-06-12 10:13:44
想实现这样的效果:

就是每次在打开进程"a.exe"之前,系统都先检查一下该进程是否存在,如果存在,就先杀死或关闭该进程,然后再打开.不然我的窗体每调用一次就会出现一次.



我的打开进程的代码是: System.Diagnostics.Process.Start("a.exe");                

杀死进程的代码是:

                Process[] eprocesses = Process.GetProcessesByName("a.exe");
                    try
                    {
                        for (int i = 0; i < eprocesses.Length; i++)
                            eprocesses[i].Kill();//终止进程   
                    }
                    catch
                    {
                    }



为什么没作用呢,进程还一直存在.


谢谢.
                    
        

14 个解决方案

#1



System.Diagnostics.Process[] process = System.Diagnostics.Process.GetProcesses();
for (int i = 0; i < process.Length; i++)
{
if (process[i].ProcessName == "a.exe")
process[i].Kill();
}

#2


mark

#3


Process[] eprocesses = Process.GetProcessesByName("[color=#FF0000]a[/color");   //不用a.exe

#4


进程名是不带后缀名的

#5



杀死再启动是一种办法

另一种是让那个程序自己判断,如果已经启动,则激活已经启动的窗口。

#6


谢谢大家

引用 5 楼 cpio 的回复:
杀死再启动是一种办法 

另一种是让那个程序自己判断,如果已经启动,则激活已经启动的窗口。 



楼上,怎么激活呢

#7


激活也需要检查进程吧,除非写一个专门的服务,否则系统怎么会白白帮你检测到底你有没有已经执行了程序。

#8


引用 4 楼 journeydj 的回复:
进程名是不带后缀名的


正确

#9


谢谢.
我的启动进程的代码是:

   System.Diagnostics.Process.Start("D:\\My Documents\\Visual Studio 2005\\Projects\\A\\A\\bin\\Release\\A.exe");

 
那杀死应该怎么杀呢,只写个"A"进程马那瓜子,还是("D:\\My Documents\\Visual Studio 2005\\Projects\\A\\A\\bin\\Release\\A.exe")这个名字呢

#10


谢谢大家的建议,现在进程杀死了(进程名是不带后缀实现,呵呵),已经实现了目标,但是还有一个小问题,就是我的程序每次启动进程的时候,都会最小化托盘的.


现在进程虽然杀死了,但是每调用一次程序,那个小图标(是通过一个NotifyIcon图标)仍会出现在计算机右下角一次,只有鼠标点了一下以后,它才消失.

这个怎么让它随着进程被杀死自动消失啊

#11


Kill 方法将异步执行。在调用 Kill 方法后,请调用 WaitForExit 方法等待进程退出,或者检查 HasExited 属性以确定进程是否已经退出。

#12


怎么让最小化托盘的图标随着进程被杀死自动消失啊

#13


谢谢大家的帮助,非常感谢。

#14


激活可以使用API,得先找到主窗口句柄

#1



System.Diagnostics.Process[] process = System.Diagnostics.Process.GetProcesses();
for (int i = 0; i < process.Length; i++)
{
if (process[i].ProcessName == "a.exe")
process[i].Kill();
}

#2


mark

#3


Process[] eprocesses = Process.GetProcessesByName("[color=#FF0000]a[/color");   //不用a.exe

#4


进程名是不带后缀名的

#5



杀死再启动是一种办法

另一种是让那个程序自己判断,如果已经启动,则激活已经启动的窗口。

#6


谢谢大家

引用 5 楼 cpio 的回复:
杀死再启动是一种办法 

另一种是让那个程序自己判断,如果已经启动,则激活已经启动的窗口。 



楼上,怎么激活呢

#7


激活也需要检查进程吧,除非写一个专门的服务,否则系统怎么会白白帮你检测到底你有没有已经执行了程序。

#8


引用 4 楼 journeydj 的回复:
进程名是不带后缀名的


正确

#9


谢谢.
我的启动进程的代码是:

   System.Diagnostics.Process.Start("D:\\My Documents\\Visual Studio 2005\\Projects\\A\\A\\bin\\Release\\A.exe");

 
那杀死应该怎么杀呢,只写个"A"进程马那瓜子,还是("D:\\My Documents\\Visual Studio 2005\\Projects\\A\\A\\bin\\Release\\A.exe")这个名字呢

#10


谢谢大家的建议,现在进程杀死了(进程名是不带后缀实现,呵呵),已经实现了目标,但是还有一个小问题,就是我的程序每次启动进程的时候,都会最小化托盘的.


现在进程虽然杀死了,但是每调用一次程序,那个小图标(是通过一个NotifyIcon图标)仍会出现在计算机右下角一次,只有鼠标点了一下以后,它才消失.

这个怎么让它随着进程被杀死自动消失啊

#11


Kill 方法将异步执行。在调用 Kill 方法后,请调用 WaitForExit 方法等待进程退出,或者检查 HasExited 属性以确定进程是否已经退出。

#12


怎么让最小化托盘的图标随着进程被杀死自动消失啊

#13


谢谢大家的帮助,非常感谢。

#14


激活可以使用API,得先找到主窗口句柄