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

时间:2014-05-22 07:56:13

标签: c# process

在我的c #windows应用程序中,我编写了下面的代码来运行该进程并在启动c#应用程序之前运行任何进程,如果运行kill它并通过我的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开发的不同applcation)应用程序正在运行kill它,并通过c#重新进行它。如果我调试我的代码一切正常。 但是如果我在调试模式下运行我的c#代码然后, PNAME [I] .Kill();线 pname = Process.GetProcessesByName(&#34; TestApp&#34;);这是再次发现。所以长度变为1而c#无法启动它并退出if条件。 if(pname.Length == 0)     {      - }

此致

1 个答案:

答案 0 :(得分:2)

pname[i].WaitForExit()之后使用pname[i].Kill()以确保它已被杀死。即:

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

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