Ich schreibe gerade ein sehr leichtgewichtiges Programm, deshalb muss ich C ++ verwenden, da es nicht an .NET Framework gebunden ist, was die Größe des Programms drastisch erhöht.
Ich muss in der Lage sein, den Prozess zu beenden, und dazu muss ich ein Prozess-Handle bekommen. Unglücklicherweise habe ich noch nicht herausgefunden, wie ich das machen soll.
P.S. Ich weiß, dass man zum Beenden eines Prozesses TerminateProcess verwenden muss.
Die PID, die Sie für OpenProcess () benötigen, ist normalerweise nicht leicht zu erreichen. Wenn Sie nur einen Prozessnamen haben, müssen Sie die laufenden Prozesse auf dem Computer wiederholen. Tun Sie dies mit CreateToolhelp32Snapshot, gefolgt von Process32First und Schleife mit Process32Next. Die PROCESSENTRY32.szExeFile gibt Ihnen den Prozessnamen (nicht Pfad!), Th32ProcessID gibt Ihnen die PID.
Die nächste Überlegung ist, dass der Prozess möglicherweise mehr als einmal angezeigt wird. Und es besteht die Möglichkeit, dass derselbe Prozessname für sehr unterschiedliche Programme verwendet wird. Wie "Setup". Wenn Sie nicht nur alle töten wollen, müssen Sie versuchen, einige Laufzeit-Informationen von ihnen zu erhalten. Fensterbeschriftungsleiste, vielleicht. GetProcessImageFileName () kann Ihnen den Pfad zu der EXE-Datei angeben. Wenn Sie das native Kernel-Format verwenden, müssen Sie QueryDosDevice den Laufwerksgerät-Namen einem Laufwerksbuchstaben zuordnen.
Die nächste Überlegung sind die Rechte, nach denen Sie in OpenProcess () fragen. Es ist unwahrscheinlich, dass du PROCESS_ALL_ACCESS
bekommst, alles was du brauchst ist PROCESS_TERMINATE
. Obwohl das auch privilegiert ist. Stellen Sie sicher, dass das Konto, das Sie zum Ausführen Ihres Programms verwenden, dieses Recht erhalten kann.
Anstatt all diesen Schmerz durchzugehen, um einen Prozess mit einem bekannten Namen zu töten, warum rufen Sie nicht einfach "system" an und bitten Sie die Befehlszeile, es zu töten?
Zum Beispiel
%Vor%Um ein Handle zu erhalten, das an TerminateProcess übergeben werden soll, verwenden Sie OpenProcess in Kombination mit anderen Funktionen wie EnumProcesses .
Hier ist das vollständige Beispiel für Visual Studio 2010 C ++ - Projekt, wie Sie den Prozess durch den EXE -Dateiname beenden können.
Um dies zu überprüfen, führen Sie einfach den Internet Explorer aus und führen Sie anschließend folgenden Code aus.
%Vor%Stellen Sie sich vor, in C # sieht es wie
aus %Vor% CreateProcess
und OpenProcess
gibt Prozess-Handles zurück.
Hier finden Sie einige Beispielcode , um einen Prozess zu finden, indem Sie den System, um alle Prozesse aufzulisten und dann die Liste nach dem gewünschten Prozess zu durchsuchen.
Hier sind einige funktionierende Beispielcodes, um einen Prozess namens "ShoulBeDead.exe" zu beenden:
%Vor%