Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   ExitCode von Expand (https://www.delphipraxis.net/9421-exitcode-von-expand.html)

Luckie 26. Sep 2003 00:03


ExitCode von Expand
 
Ich muß in einem Prozess expand aufrufen. Jetzt die Frage: Hat das Konsolenprogramm eine ExitCode oder nicht? Mir reicht hat geklappt / hat nicht geklappt. Im MSDN und mit Google konnte ich nichts finden.

Christian Seehase 26. Sep 2003 00:11

Re: ExitCode von Expand
 
Moin Luckie,

erstell' Dir mal eine Batchdatei mit folgendem Inhalt:

Code:
expand
if errorlevel == 1 echo code 1
if errorlevel == 0 echo code 0
damit solltest Du es rausbekommen können.
Ich tippe mal auf 1 => Fehler, 0 => OK

Wichtig: Die Reihenfolge der Errorlevel-Abfragen muss immer vom höchsten zum niedrigsten zu testenden Wert erfolgen.

Luckie 26. Sep 2003 00:14

Re: ExitCode von Expand
 
Sieht bei mir dann so aus:
Code:

D:\>expand i:\foo.sy_ d:\foo.sys
Microsoft (R) Programm zur Dateiexpandierung Version 5.00.2134.1
Copyright (C) Microsoft Corp. 1990-1999. Alle Rechte vorbehalten.

Fehler beim Öffnen der Eingabedatei: i:\foo.sy_.


D:\>if errorlevel 1 echo code 1

D:\>if errorlevel 0 echo code 0

D:\>pause
Drücken Sie eine beliebige Taste . . .
Was sagt mir das jetzt?

Und so bekomme ich auch 0 raus:
Delphi-Quellcode:
function RunProcess(FileName: string; ShowCmd: DWORD; wait: Boolean; ProcID: PDWORD): 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;

function GetExitCodeExpand(PID: LongWord): Integer;
var
  hProcess: THandle;
  Code: Cardinal;
begin
  result := 0;
  hProcess := OpenProcess(PROCESS_QUERY_INFORMATION, False, PID);
  if hProcess <> 0 then
  begin
    GetExitCodeProcess(hProcess, Code);
    result := Code;
  end;
end;



procedure TForm1.Button1Click(Sender: TObject);
var
  ProcID: Cardinal;
begin
  RunProcess('expand -r i:\foo.sy_ d.\foo.sys', SW_SHOWNORMAL, True, @ProcID);
  ShowMessage(IntToStr(GetExitCodeExpand(ProcID)));
end;

Christian Seehase 26. Sep 2003 00:20

Re: ExitCode von Expand
 
Moin Luckie,

also ich hab's mal eben ausprobiert:
Bei Erfolg lässt er die 1 aus und gibt 0 zurück, bei Fehler (ich hab' einfach keine Datei angegeben) gibt er 1 (und 0, deshalb die Reihenfolge) zurück.

Schreib doch noch mal ein @echo off als erste Zeile in die Datei.

Luckie 26. Sep 2003 00:23

Re: ExitCode von Expand
 
Hm. Im obigen Code ist ein Tippfehler. Es muß natürlich d: heißen und nicht d. Aber trotzdem bekomme ich immer 0 zurück egal, ob es die Datei gibt oder nicht.

Christian Seehase 26. Sep 2003 00:28

Re: ExitCode von Expand
 
Moin Luckie,

logisch, dass Du bei Deinem Source 0 herausbekommst.
Nachdem Du die RunProcessRoutine verlassen hast ist die PID ja ungültig, und OpenProcess gibt 0 zurück, so dass Dein Default Result, also 0, zurückgegeben wird.

Du gibst doch bei RunProcess den Exitcode zurück. Benutz' doch den.

Luckie 26. Sep 2003 00:31

Re: ExitCode von Expand
 
Ich Depp.

Christian Seehase 26. Sep 2003 00:31

Re: ExitCode von Expand
 
:mrgreen:

funzt es jetzt?

Luckie 26. Sep 2003 00:37

Re: ExitCode von Expand
 
:wall: :wall: :wall: :wall:

Ja. :oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:46 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