Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: Fehler in RunProcess Funktion?!

  Alt 2. Dez 2009, 11:58
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;
$2B or not $2B
  Mit Zitat antworten Zitat