Einzelnen Beitrag anzeigen

Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#1

Fehler in RunProcess Funktion?!

  Alt 2. Dez 2009, 10:52
Hi@all!

Ich versuche gerade für einen Kunden ein Programm zu schreiben, was neben anderen hauptaufgaben versuchen soll, einen anderen Prozess zu überwachen, ob dieser ausgeführt wird. Dabei überprüfe ich 1 innerhalb eines vorgegebenen Zeitraums, ob das Prozesshandle =0 ist, und falls dem so ist, benutze ich die "RunProcess" Funktion aus dem Forum hier, um den Prozess neuzustarten:

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
    if wait = FALSE then
    begin
      if ProcID <> nil then ProcID^ := ProcessInfo.dwProcessId;
      exit;
    end;
    WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
    GetExitCodeProcess(ProcessInfo.hProcess, Result);
  end;
  if ProcessInfo.hProcess <> 0 then
    CloseHandle(ProcessInfo.hProcess);
  if ProcessInfo.hThread <> 0 then
    CloseHandle(ProcessInfo.hThread);
end;
Dabei habe ich folgendes Verhalten festgestellt: Wenn CreateProcess nicht erfolgreich war und "False" zurückgibt (bei mir simuliert durch einen falschen Dateinamen), bekomme ich eine Exception in der Zeile "CloseHandle(ProcessInfo.hProcess)".

Wäre es nicht richtiger, die beiden "CloseHandles" nur dann aufzurufen, wenn das CreateProcess zuvor ein "True" zurückgegeben hat?

Viele Grüße und besten Dank,

Euer Michael
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat