被杀死的进程使用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){--}

被杀死的进程使用GetProcessesByName再次返回

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是异步的,所以它不等待实际的进程被杀死。

它在调试时工作的事实可能只是因为它需要更多的时间,所以它允许进程被终止。

相关文章:
  • 没有找到相关文章