Le suivi des enfants de processus d'un processus
Je suis en cours d'exécution .exe fichier à l'aide de ce code:
Process proc = Process.Start("c:\program.exe");
proc.WaitForExit();
Si je commence à Stopwatch
avant de commencer le processus et l'arrêter après proc.WaitForExit();
ligne, je peux obtenir à la fois que l'utilisateur a l'aide de ce programme particulier.
Le problème que je me pose, c'est que certains programmes (et des jeux) utiliser des lanceurs - petits .fichier exe qui généralement vérifie quelque chose, puis lance un autre .fichier exe qui est en fait le programme ou le jeu que l'utilisateur veut exécuter. Dans ces cas, le code ci-dessus ne fonctionne pas parce qu'il est de retour après lanceur existe.
Comment puis-je faire le suivi de tous les processus qui proc
s'exécute, et attendre jusqu'à tous d'entre eux sont licenciés?
Malheureusement non 🙁 je ne sais pas du nom.
+1 pour la méthode d'extension.
vous devriez poster votre solution comme une réponse, et non comme une partie de la question. Je vais l'afficher comme une communauté wiki, n'hésitez pas à poster vos propres "dupliquer" réponse et laissez un commentaire sous la communauté wiki réponse, il demande à être supprimé, car il est une dup de votre propre.
OriginalL'auteur xx77aBs | 2013-07-29
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à ce - Trouver tous les processus enfants de mon propre .NET de processus et de savoir si un processus est un enfant de mon propre? ou http://social.msdn.microsoft.com/Forums/vstudio/en-US/d60f0793-cc92-48fb-b867-dd113dabcd5c/how-to-find-the-child-processes-associated-with-a-pid. Ils offrent un moyen de trouver de processus enfant par un parent PID (que vous avez).
Vous pouvez écrire surveiller le processus de création et également obtenir de ses enfants. Vous pouvez ensuite suivre tout, et attendre qu'elles soient toutes à la fin. Je dis "essayer" car je ne suis pas sûr que vous pourriez attraper des changements très rapides (un processus de départ d'autres et puis de mourir avant d'obtenir son enfants).
OriginalL'auteur Vadim
Voici la solution que le demandeur a trouvé:
OriginalL'auteur
vous ne pouvez pas attendre pour processus(B) un autre processus(Un) est en cours d'exécution, si ce processus(Un) n'est pas en attente pour le processus(B). ce que vous pouvez faire est de suivre le processus à l'aide de
Process.GetProcessesByName()
si vous le savez, c'est le nomdans ce cas, vous pouvez suivre le processus actifs avant et après que vous avez exécuté le programme... c'est pas une bonne façon, mais c'est le seul que vous pouvez utiliser
J'y ai pensé, mais il n'est pas très fiable. Je vais essayer de trouver une meilleure solution, et si je ne trouve pas, je vais peut-être suivre un peu les processus dont le fichier exécutable se trouve dans le même dossier que le lanceur, ou quelque chose comme ça.
bonne chance
OriginalL'auteur No Idea For Name