![]() |
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.
|
Re: ExitCode von Expand
Moin Luckie,
erstell' Dir mal eine Batchdatei mit folgendem Inhalt:
Code:
damit solltest Du es rausbekommen können.
expand
if errorlevel == 1 echo code 1 if errorlevel == 0 echo code 0 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. |
Re: ExitCode von Expand
Sieht bei mir dann so aus:
Code:
Was sagt mir das jetzt?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 . . . 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; |
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. |
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.
|
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. |
Re: ExitCode von Expand
Ich Depp.
|
Re: ExitCode von Expand
:mrgreen:
funzt es jetzt? |
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