Eigentlich hatte ich es noch nie erlebt, daß CloseHandle eine
Exception wirft
Aber bevor man hier erstmal weiter rumspielt:
Bist du sicher, daß diese Funktion überhaupt für dich von nutzen ist?
Es wird hier ja gewartet, bis sich der andere Prozess beendet hat, was für eine Überwachung doch nicht so vorteilhaft sein sollte.
ganz übersehn, daß man dieses abschalten kann
bin gleich zurück
[edit]
so,
- das fehlende Result wird gesetzt
- die Handles werden korrekt und vorallem IMMER geschlossen (im Original wurde das oftmals vergessen)
Delphi-Quellcode:
function RunProcess(const FileName: string; ShowCmd: LongWord; Wait: Boolean; ProcessID: PLongWord = nil): LongWord;
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
ZeroMemory(@StartupInfo, SizeOf(StartupInfo));
StartupInfo.cb := SizeOf(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
StartupInfo.wShowWindow := ShowCmd;
if CreateProcess(nil, PChar(Filename), nil, nil, False,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil,
StartupInfo, ProcessInfo) then
begin
try
CloseHandle(ProcessInfo.hThread);
if Wait then
begin
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess, Result);
end
else
begin
if Assigned(ProcessID) then ProcessID^ := ProcessInfo.dwProcessId;
Result := S_OK;
end;
finally
CloseHandle(ProcessInfo.hProcess);
end;
end else Result := WAIT_FAILED;
end;