Comment tuer efficacement un processus en C ++ (Win32)?
Je suis en train d'écrire un très léger programme donc, je dois utiliser le C++ car il n'est pas lié .NET framework qui augmente considérablement la taille du programme.
J'ai besoin d'être en mesure d'arrêter le processus, et pour ce faire j'ai besoin d'obtenir un handle de processus. Unfortuanately je n'ai pas compris comment le faire encore.
P. S. je sais que pour tuer un processus, vous devez utiliser TerminateProcess.
source d'informationauteur Kristina Brooks
Vous devez vous connecter pour publier un commentaire.
Le PID que vous avez besoin pour OpenProcess() n'est normalement pas facile d'obtenir une prise de. Si l'on a un nom de processus, alors vous avez besoin pour itérer le processus en cours d'exécution sur la machine. Le faire avec CreateToolhelp32Snapshot, suivie par process32first une seule et boucle avec Process32Next. Le PROCESSENTRY32.szExeFile vous donne le nom du processus (pas de sentier!), th32ProcessID vous donne le PID.
La question suivante, c'est que le processus peut apparaître plus d'une fois. Et il y a une chance que le même nom de processus est utilisé pour les très différents programmes. Comme "Setup". Si vous ne voulez pas seulement pour tous les tuer, vous aurez besoin d'essayer d'obtenir certains d'exécution info de leur part. La fenêtre de la barre de légende de texte, peut-être. GetProcessImageFileName() peut vous donner le chemin d'accès à l' .exe. Il utilise le noyau natif format, vous devez QueryDosDevice pour mapper un lecteur de disque nom de l'appareil à une lettre de lecteur.
La question suivante est de le droits de vous demander dans OpenProcess(). Vous êtes peu probable d'obtenir
PROCESS_ALL_ACCESS
tous vous avez besoin estPROCESS_TERMINATE
. Même si c'est privilégiée. Vérifiez que le compte que vous utilisez pour exécuter votre programme peut obtenir ce droit.Plutôt que de passer par tout ce que la douleur de tuer un processus avec un nom connu, pourquoi ne pas simplement appeler le "système" et demander à la ligne de commande pour le tuer?
Par exemple,
À obtenir une poignée de passer pour TerminateProcessutilisez OpenProcess en combinaison avec une autre fonction comme EnumProcesses.
Qui a travaillé
Ici est l'exemple complet pour Visual Studio 2010 projet C++ comment tuer le processus par le EXE nom de fichier.
Afin de vérifier qu'il exécutez Internet Explorer et après cette exécution de code suivant.
Imaginer en C# il ressemble
CreateProcess
etOpenProcess
processus de retour des poignées.Voici quelques exemple de code trouver un processus en demandant au système de la liste de tous les processus et la recherche de la liste pour le processus que vous voulez.
Voici quelques exemples de codes de tuer un processus appelé "ShouldBeDead.exe":
windows uniquement