Thema: Delphi ExitCode ermitteln...

Einzelnen Beitrag anzeigen

Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#1

ExitCode ermitteln...

  Alt 26. Dez 2005, 15:16
Ich führe ein Kommandozeilen Programm mit folgendem Code aus:
Delphi-Quellcode:
function RunCaptured(const _dirName, _exeName, _cmdLine:
  string):
  string;
var
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
  Buffer: array[0..255] of char;
  bRead: DWord;
  hRead, hWrite: THandle;
  saAttr: TSECURITYATTRIBUTES;
  Output: TMemoryStream;
begin
  Result := '';
  saAttr.nLength := sizeof(TSECURITYATTRIBUTES);
  saAttr.bInheritHandle := true;
  saAttr.lpSecurityDescriptor := nil;
  if not CreatePipe(hRead, hWrite, @saAttr, 0) then
  begin
    ShowMessage('Could not create Pipe!');
    Result := 'ERROR: Could not create Pipe!';
    Exit;
  end;
  try
    FillChar(StartupInfo, Sizeof(StartupInfo), #0);
    StartupInfo.cb := Sizeof(StartupInfo);
    StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
    StartupInfo.wShowWindow := SW_HIDE and SW_SHOWMINNOACTIVE;
    { Handle mit Childhandle Assoziieren }
    StartupInfo.hStdInput := GetStdHandle(STD_INPUT_HANDLE);
    { Ausgaben abfangen }
    StartupInfo.hStdOutput := hWrite;
    { Fehler abfangen }
    StartupInfo.hStdError := hWrite;
    if not CreateProcess(nil, PChar(_exeName + ' ' + _cmdLine), nil, nil, True,
      0, nil, PChar(_dirName), StartupInfo, ProcessInfo) then
    begin
      ShowMessage('Could not create process!');
      Result := 'ERROR: Could not create process!';
    end
    else
    begin
      { loop bis zum Abbruch }
      while WaitforSingleObject(ProcessInfo.hProcess, 0) <> WAIT_OBJECT_0 do
        { dummy }
        ;
      { Den gesamten Output lesen und in eine StringList kopieren }
      Output := TMemoryStream.Create;
      Output.Clear;
      repeat
        Buffer := #0;
        if ReadFile(hRead, Buffer, 80, bRead, nil) then
        begin
          Output.WriteBuffer(Buffer, bRead);
          Output.Position := bRead;
        end
        else
          break;
      until bRead <> 80;
      Output.Position := 0;
      Buffer := #0;
      { Die Ausgaben hinzufügen }
      { Add the output }
      output.Read(Buffer, output.Size);
      Result := Buffer;
      FreeAndNil(Output);
    end;
  finally
    { Lese- und Schreibhandles der Pipe schliessen }
    CloseHandle(hRead);
    CloseHandle(hWrite);
  end;
end;
Die Ausgaben des Programmes werden auch alle wunderbar gelesen. Ich benötige jedoch auch noch den ExitCode des Programmes ... Wie komme ich nun also auch noch an den ExitCode?
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat