Prozesshandle auf Validität prüfen
-
Hi

Wie kann ich prüfen ob ein Prozesshandle valid ist ?
Gibt es da eine einfache Möglichkeit ?Grüße
-
Vielleicht ist das etwas naiv. Aber ich würde das Prozesshandle benutzen und dann den Rückgabewert der Funktion prüfen bzw.
GetLastError.
-
OpenProcess
-
O.o schrieb:
Vielleicht ist das etwas naiv. Aber ich würde das Prozesshandle benutzen und dann den Rückgabewert der Funktion prüfen bzw.
GetLastError.Die Idee hatte ich auch schon jedoch habe ich gehofft es gäbe eine schönere Möglichkeit als einen Fehler zu verursachen.

-
Grundsätzlich wieder mal die nervige Frage: Wozu brauchst du das?

(Sollte vor allem dazu dienen, dass du dir nicht irgendwelche Frickellösungen und -wege aneignest, nur weil dir keine Alternativen bekannt sind.)
-
xenus schrieb:
Grundsätzlich wieder mal die nervige Frage: Wozu brauchst du das?

(Sollte vor allem dazu dienen, dass du dir nicht irgendwelche Frickellösungen und -wege aneignest, nur weil dir keine Alternativen bekannt sind.)
Hast du das in der Zwischablage?

Naja, ich schreibe gerade für mich ein eine Klassenbibliothek zum Arbeiten mit Prozessen unter Windows.
Da ich sie weitergeben werde, bemühe ich mich sie so sauber & ausführlich wie möglich zu coden.
Deswegen frage ich danach. Früher hätte ich eine solche Funktion öfters in Projekten gerne gehabt deswegen wollte ich sie implementieren wenn es da etwas gibt. Aber ok, dann lass ichs.
-
Ich würde es auch lassen.
Du kannst ja stattdessen assert() verwenden, um zu checken, ob die Funktionen die du damit aufrufen willst, auch hingehaut haben.Wenn du irgendwo checken möchtest, ob ein Handle OK ist, wo du aber (noch) keine Funktion damit aufrufen willst (z.B. Konstruktor einer "SmartHandle" Klasse), könntest du ja selbst eine "IsHandle()" Funktion schreiben:
bool IsHandle(HANDLE h) { DWORD flagsDummy; return ::GetHandleInformation(h, &flagsDummy) != 0; } // bzw. bool IsProcessHandle(HANDLE h) { return ::GetProcessId(h) != 0; }Bloss können diese Funktionen auch dann fehlschlagen, wenn es ein gültiges Handle ist, der aufrufende Thread/Prozess aber nicht die nötigen Rechte auf das Handle hat.
Persönlich habe ich aufgehört solche Checks einzubauen.
assert() auf CloseHandle() "ist Pflicht", ebenso bei anderen Funktionen die "per Definitionem zu funktionieren haben". Aber mehr mache ich nicht. Man übersieht viel zu leicht irgendwas, und dann ist der hübsche Debug-Check in bestimmten Situationen auf einmal nurmehr lästig.