bei dir dürftest du die
if ProcessInfo.xxx <> 0 then weglassen können, da an dieser Stelle die Handles ja vorhanden sein sollten.
PS:
bei
if wait = FALSE then ... exit; wären die Handles nicht freigegeben worden
und auch das Result wäre da undefiniert geblieben (meckert diesbezüglich eigentlich Delphi nicht? )
Delphi-Quellcode:
function RunProcess(FileName: string; ShowCmd: DWORD; wait: Boolean; ProcID: PCardinal): Longword;
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
FillChar(StartupInfo, SizeOf(StartupInfo), #0);
StartupInfo.cb := SizeOf(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
StartupInfo.wShowWindow := ShowCmd;
if not CreateProcess(nil,
@Filename[1],
nil,
nil,
False,
CREATE_NEW_CONSOLE or
NORMAL_PRIORITY_CLASS,
nil,
nil,
StartupInfo,
ProcessInfo)
then
Result := WAIT_FAILED
else
begin
try
if not wait then
begin
if ProcID <> nil then ProcID^ := ProcessInfo.dwProcessId;
Result := S_OK;
exit;
end;
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess, Result);
finally
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
end;
end;
end;
Zitat von
alleinherrscher:
Okay, dann sollten wir das vielleicht mal in der Code-Library ändern...
hatte es schon gemeldet und mal sehn ob/wann sich ein Mod drum kümmert
[edit]
noch schnell das Result:=S_OK; eingefügt