-
arréter un process
Bonjour,
Pour démarrer un programme externe, je fais:
Code:
Process pr = Process.Start("monexe.exe");
Mais si je veux ensuite l'arrêter, est-ce que je suis obligé de passer par un sendMessage avec un WM_CLOSE ou bien y a t-il une autre solution avec C# ?
Papy !
-
pour ne pas faire , puisque tu as pr :)
pr.Kill();
hein, pourquoi pas ?
-
ben j'y pensais mais ça me semblait justement un peu "kill-bill" :D
Le kill va le tuer sans réfléchir.
Le problème c'est que ce programme peut être être en train de traiter des opérations importantes (récupération de données médicales par exemple).
Il faut qu'il puisse se fermer en "douceur" après avoir terminé toutes ses opérations.
-
un WaitForExit alors; ou tu "vérifies" si toutes les opérations sont finies avant de kill
-
beh, si tu veux "synchroniser" 2 process :)
Une solution, serait que le programme qui fait les traitements prenne un mutex et quand celui ci est libre, tu peux le tuer :)
sinon, tu peux toujours faire le pari de regarder son activité CPU, mais bon, c'est plus aléatoire (idem avec son occupation mémoire)
Après, le waitForExit() va te bloquer ton application et c'est pas forcément le but recherché :)
-
Le waitforexit() ne "va pas le faire" .
L'idée du mutex non plus.
En fait, le programme est déjà codé et ne pourra surement pas être modifié.
Il s'agit d'un exe qui se lance dans la barre des tâches de windows et qui surveille puis lit éventuellement des informations sur un port COM. Ces infos lues sont transformées en fichier que mon programme doit ensuite récupérer.
Mon problème est de pouvoir l'exécuter et le laisser "vivre sa vie" tant que mon application tourne, ou que je lui demande de s'arrêter.
Pour le WaitForEXit() je pourrais le coller dans un thread mais ça ne réglera pas mon problème qui est de pouvoir lui dire: "c'est bon, tu peux arréter et te fermer mais seulement quand tu n'auras plus rien à faire" :D
Apparemment, le sendmessage semble nécessaire.
-
oui
Cela dit, tu aurais peut-etre une solution :)
Tu peux effectivement faire un sendMessage() on est ok, mais tu pourrais aussi vérifier si le fichier est accessible en Ecriture. Si c'est le cas, c'est que ton application a fini ses traitements :) (si cela est possible).
(cela dit, le WM_CLOSE, c'est bien, à condition que ton application le gère comme il faut et qu'elle continue à répondre :) )
-
J'ai oublié le s à fichiers ... :-)
Ce programme peut en générer plusieurs.
Vu qu'il semble que le WM_CLOSE soit la seule solution viable, j'espère que le programme externe gère ça comme il faut. Mais là, je dirais qu'il faut bien que ma "responsabilité" s'arrête quelque part.
Merci pour le coup de main !