在我的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) { - }
此致
答案 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
是异步的,所以它不会等待实际的进程被杀死。
它在调试时工作的事实可能只是因为它需要更多时间,所以它允许进程被杀死。