2014-05-22 20 views
-1

在我的c#windows應用程序中,我已經編寫了下面的代碼來運行該進程並殺死所有進程,如果在啓動c#應用程序之前運行,並且如果運行殺死它並通過我的c#應用。使用GetProcessesByName再次獲取被殺死的進程

//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; 
} 

我的問題是,如果我申請的任何TestApp(由Flex開發出了不同的applcation)正在運行殺死它運行我的C#應用​​程序之前,並且由C#restrt它。如果我調試我的代碼,一切工作正常。 但是,如果我運行我的C#代碼不在調試模式,然後, pname [i] .Kill(); pname = Process.GetProcessesByName(「TestApp」);這是再次發現。所以長度變爲1,c#無法啓動它並退出if條件。 如果(pname.Length == 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是異步的,所以它不會等待被殺害的實際過程。

它在調試時工作的事實可能僅僅是因爲它需要更多時間,所以它可以讓進程被終止。

+0

它解決了我的問題!謝謝! – Sangeetha