2014-05-22 3 views
-1

Dans mon application C# windows, j'ai écrit le code ci-dessous pour lancer le processus et tuer tout processus s'il est exécuté avant de démarrer l'application C# et si je l'exécute, le redémarrer application.Le processus tué est de retour avec 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; 
} 

Ma question est, avant que je lance mon application C# le cas échéant TestApp (Ses différentes applcation développé par Flex) l'application est en cours d'exécution à mort, et excit par le C#. Si je débogue mon code, tout fonctionne correctement. Mais si je cours mon code C# pas en mode débogage puis après, pname [i] .Kill(); ligne pname = Process.GetProcessesByName ("TestApp"); c'est trouver encore. Donc la longueur devient 1 et C# incapable de le démarrer et quitte la condition if. si (pname.Length == 0) { - }

Cordialement

Répondre

2

Utilisez pname[i].WaitForExit() après pname[i].Kill() pour vous assurer qu'il a été tué. i.e. .:

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 est asynchrone, donc il n'attend pas le processus réel à tuer.

Le fait que cela fonctionne pendant le débogage est probablement juste parce qu'il prend plus de temps, donc il permet de tuer le processus.

+0

Il a résolu mon problème! ... Merci! – Sangeetha

Questions connexes