Die PID Sie für Open müssen gearbeitet() ist normalerweise nicht leicht, einen zu ergattern. 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. Es verwendet das native Kernel-Format. Sie müssen QueryDosDevice verwenden, um den Laufwerksgerätnamen einem Laufwerkbuchstaben zuzuordnen.
Die nächste Überlegung ist die Rechte, die Sie in OpenProcess() fragen. Sie werden wahrscheinlich PROCESS_ALL_ACCESS
nicht bekommen, alles, was Sie brauchen, 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.
Ich habe pgrep und pkill in der Vergangenheit sieht, aber das war während Solaris Tage. –
Sie meinen in Win32. Nichts ist mit C++ hier verbunden – KeatsPeeks
Ähm ... yeah hast du Recht –