被杀死的进程使用GetProcessesByName再次返回
本文关键字:GetProcessesByName 返回 进程 | 更新日期: 2023-09-27 18:04:38
在我的c# windows应用程序中,我编写了以下代码来运行进程并杀死任何在启动c#应用程序之前运行的进程,如果运行则杀死它并再次启动我的c#应用程序。
//Finding TestApp
Process[] pname = Process.GetProcessesByName("TestApp");
If any TesyApp running before kill it
if (pname.Length != 0 && this.processId == 0)
{
for (int i = 0; i < pname.Length; i++)
{
pname[i].Kill();
}
//Again find the TestApp
pname = Process.GetProcessesByName("TestApp");
}
//If not found start the process
if (pname.Length == 0 )
{
---
process.Start();
this.processId = process.Id;
}
我的问题是,在我运行我的c#应用程序之前,如果任何TestApp(由flex开发的不同应用程序)应用程序正在运行杀死它,并通过c#重新启动它。如果我调试我的代码,一切都很好。但如果我运行我的c#代码不是在调试模式之后,pname[我].Kill ();行pname = Process.GetProcessesByName("TestApp");这又是一个发现。因此length变为1,c#无法启动它并退出if条件。如果(pname。长度== 0){--}
对
在pname[i].Kill()
之后使用pname[i].WaitForExit()
以确保其已被杀死。例如:
if (pname.Length != 0 && this.processId == 0)
{
for (int i = 0; i < pname.Length; i++)
{
pname[i].Kill();
pname[i].WaitForExit();
}
//Again find the TestApp
pname = Process.GetProcessesByName("TestApp");
}
Process.Kill
是异步的,所以它不等待实际的进程被杀死。
它在调试时工作的事实可能只是因为它需要更多的时间,所以它允许进程被终止。