Win-Prozess (Programm) beenden
-
Hallo,
es kann sein dass ich es überlesen habe, aber muss nicht für TerminateProcess(Param1,Param2) als 2. Parameter die gültige Prozess-ID angegeben werden, die man ja auslesen kann? Oder ist das garnicht mehr das Problem?
-
ich würde das auch gerne nachvollziehen, mit dem quelltext aus der FAQ (http://www.c-plusplus.net/forum/viewtopic-var-t-is-12225.html)
dort steht man muss den header "Psapi.h" includen, um die unresolved externals nicht zu bekommen...
#include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" #include "Psapi.h" TForm1 *Form1;aber ich bekomme trotzdem
[Linker Fehler] Unresolved external 'EnumProcesses' referenced from D:\CPP\PROJECTS\TASKMAN\UNIT1.OBJ
[Linker Fehler] Unresolved external 'EnumProcessModules' referenced from D:\CPP\PROJECTS\TASKMAN\UNIT1.OBJ
[Linker Fehler] Unresolved external 'GetModuleBaseNameA' referenced from D:\CPP\PROJECTS\TASKMAN\UNIT1.OBJauch das löschen der *.obj und ein neuer Versuch haben nichts gebracht.
Steht mein include an einer falschen Stelle, oder muss man noch mehr datein einbinden?
Danke!
-
[Linker Fehler] --> lib (oder obj) fehlt noch --> "psapi.lib" noch dem Projekt hinzufügen.
-
besten dank, wusste nicht das man das noch machen muss.

-
Hallo,
ich habe das selbe Problem. Eingebunden habe ich die Header- und LIB-Datei folgendermaßen:
#pragma comment(lib, "Psapi.lib") #include <psapi.h>Als Fehlermeldung bekomme ich folgendes zurück:
fatal error C1083: Include-Datei kann nicht geoeffnet werden: 'psapi.h': No such file or directory
Was mache ich falsch? Muss ich die psapi.h noch irgendwo hinkopieren? Ich bin jetzt davon ausgegangen, dass die im Visual C++ 6 mitgeliefert wird.
Vielen Dank für eure Antworten
-
Das Prozesshandle muss mit dem Flag PROCESS_TERMINATE geöffnet werden, ansonsten schlägt der TerminateProcess Aufruf fehl. Im übrigen würde ich auch nicht das Handle speichern, sondern die ProzessID und wenn ein Handle auf den Prozess benötigt wird ein neues erzeugen. Da ein Handle eine dynamische Ressource ist sollte sie sobald wie möglich wieder freigegeben werden, es macht keinen Sinn, offene Prozesshandles für alle Prozesse zu verwalten. Mein Vorschlag sähe dann so aus:
ListView füllen:
- Aufzählung über alle ProzessIDs bestimmen
- Aufzählung durchlaufen, für jede ProzessID :
- HANDLE mit OpenProcess anfordern
- Namen des Prozesses bestimmen
- HANDLE schliessen
- Listeneintrag erzeugen, ProzessID als Data an Item anhängen
Prozess beenden:
- Ausgewählten Listeneintrag bestimmen
- ProzessID aus Data des ListViewItem bestimmen
- HANDLE mit OpenProcess anfordern
- TerminateProcess aufrufen
- HANDLE schliessen