AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ExitCode ermitteln...

Ein Thema von FriFra · begonnen am 26. Dez 2005 · letzter Beitrag vom 26. Dez 2005
 
Benutzerbild von FriFra
FriFra

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

ExitCode ermitteln...

  Alt 26. Dez 2005, 14: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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz