Wie gesagt, einfach das
Handle merken und nicht sofort nach dem CreateProcess freigeben.
Mit diesem
Handle kann man dann jederzeit direkt prüfen, ohne unnötig umständlich zu suchen, ob der Prozess noch arbeitet.
MerkenZumPrüfenMitGetExitCodeProcess := PIf.hProcess;
anstatt
CloseHandle(PIf.hProcess);
(Letzeres dann machen, wenn man ganz fertig mit Prüfen ist)
PS: Falls pif vorher nicht mit 0 initialisiert wurde, dann ist [DELPHI]if PIf.dwProcessId > 0 then[DELPHI] falsch, denn
Zitat:
Return value
If the function succeeds, the return value is nonzero. To get extended error information, call GetLastError.
If the function fails, the return value is 0 (zero).
und es kann sein, dass im Fehlerfall diese Variable garnicht beschrieben wird.
Delphi-Quellcode:
Result := CreateProcessWithLogonW(PWideChar(User), nil, PWideChar(PW), 0, nil, PWideChar(ws), CREATE_DEFAULT_ERROR_MODE, nil, PWideChar(param), @si, @pif);
if Result <> 0 then
Das Sleep sollte auch unnötig sein. (die Daten in diesem Record werden sich in der Zwischenzeit garantiert nicht ändern)