![]() |
Returncode von WinRar
Hallochen,
eine kleine Frage. Ich rufe in meinem Programm WinRar mit Parametern auf, um Dateien zu packen und zu entpacken. Nun steht im Handbuch von WinRar: Zitat:
Vielen Dank, Gina. PS: Die besagte Umgebungsvariable kann ich bei mir nirgends finden... |
Re: Returncode von WinRar
|
Re: Returncode von WinRar
Vielen Dank,
kannst du mir bitte noch erklären, wie ich das benutze? Ich glaub ich mache da was falsch, da mir nichts zurück geliefert wird... :oops: Tausend Dank, Gina. |
Re: Returncode von WinRar
Hi,
da ich eben gemerkt habe, dass mein Delphi mit der Funktion noch gar nichts anzufangen weiß, hier ein anderer Weg:
Delphi-Quellcode:
Aufruf mit:
function GetEnvVar(name: String): String;
var pc: PChar; l: Integer; begin l := GetEnvironmentVariable(PChar(name), nil, 0); GetMem(pc, l); try GetEnvironmentVariable(PChar(name), pc, l); result := pc; finally FreeMem(pc, l); end; end;
Delphi-Quellcode:
Label1.Caption := GetEnvVar('PATH');
|
Re: Returncode von WinRar
Vielen Dank erstmal.
Leider wird mir auch damit nix angezeigt. :cry: Also scheint diese Umgebungsvariable tatsächlich nicht zu existieren. PATH wird mir angezeigt, wenn ich sie abfrage. Wenn die ERRORLEVEL existieren würde, müßte ich sie doch in der Systemsteuerung finden, oder? Ich hab auch schon spaßhalber eine dort angelegt, aber auch dann passiert nix. Wenn ein Programm ausgeführt wird und ein Fehler auftritt, speichert das jedes Programm woanders ab? Oder gibt es da eine allgemeine Windows-Variable, die ich eventuell noch abfragen könnte? Tausend Dank, Gina. |
Re: Returncode von WinRar
das ist eine umgebungsvariable die nirgends declariert wurde.
in batchdateien konnte man mit
Code:
das ganze abfragen ob es eine 5 war, also sie muss irgendwie verfügbar sein ist aber vermutlich instanzgebunden. Das heißt nach dem schließen der console ist die errolevel-variable wieder undefiniert
if errorlevel == 5
|
Re: Returncode von WinRar
Hmm... das erklärt natürlich vieles. Ich habe inzwischen auch mehrere batch-scritpe gefunden, wo das benutzt wurde... Scheint also nur unter Dos zu funktionieren...
Wie kann ich aus Delphi heraus irgendwie so ein batch-Script generieren, damit ich ERRORLEVEL auslesen kann? Danke Euch ganz dolle, Gina. |
Re: Returncode von WinRar
das hat nix mit dos zu tun sondern damit das errorlevel nur in der instanz gültig ist. Wie du eine neue Batchdatei erstellst wäre eine neue Frage und somit ein neuer thread. (batchdatei ist nix anderes als eine textdatei wo befehle hintereinander stehen (eine stringlist würde sich da empfehlen))
|
Re: Returncode von WinRar
Aso... *oops* Eigentlich ist mir das mit einer bat auch irgendwie nicht so schön. Falls also doch noch jemandem einfallen sollte, wie ich die Variable ERRORLEVEL abfragen kann, würde ich mich sehr freuen. Ich hatte auch schon probiert, sie während des Wartens auf Beenden der WinRar.exe abzufragen, aber da stand immer 0 drin. (Habe extra einen Fehler produziert...)
Was ich noch probiert habe, ist die Fehler in eine log-Datei zu schreiben mit dem Parameter -ilog, aber das hat nicht geklappt, obwohl mein WinRar registriert ist... *grml* Vielleicht hab ich dabei auch etwas falsch gemacht. Wenn das vielleicht noch jemand von Euch testen könnte, wäre das auch supi... Vielen lieben Dank, bis morgen, Gina. |
Re: Returncode von WinRar
Hi,
so noch mal was neues :wink: . Ich hatte bei meinen letzten Beiträgen gar nicht daran gedacht, dass ERRORLEVEL ja keine normale Umgebungsvariable ist. Die folgende Funktion startet das Programm in Cmd und weißt nach dessen Ende den ExitCode dem gleichnamigen Parameter zu. Sollte beim Starten ein Fehler auftreten, wird false zurückgeliefert.
Delphi-Quellcode:
function RunProcess(Cmd: String; var ExitCode: Cardinal): Boolean;
var si: TStartupInfo; pi: TProcessInformation; begin Result := false; ZeroMemory(@si, sizeof(si)); si.cb := sizeof(si); ZeroMemory(@pi, sizeof(pi)); if CreateProcess(nil, PChar(Cmd), nil, nil, false, 0, nil, nil, si, pi) then begin WaitForSingleObject(pi.hProcess, INFINITE); GetExitCodeProcess(pi.hProcess, ExitCode); Result := true; end; CloseHandle(pi.hProcess); CloseHandle(pi.hThread); end; |
Re: Returncode von WinRar
Wie kann man eigentlich sein Programm mit einem bestimmten ErrorLevel oder ExitCode beenden?
mfg, mh166 |
Re: Returncode von WinRar
![]() |
Re: Returncode von WinRar
Hallochen,
ich danke Euch ganz doll für die Hilfe. Inzwischen hatte ich eine Routine gefunden, mit der ich ebenfalls den Exitcode auslesen konnte. Ich hab sie ein klein wenig verändert und gebe direkt den Exitcode zurück:
Delphi-Quellcode:
Das funktioniert sowohl mit der rar.exe als auch mit der Winrar.exe. Die Exitcodes entsprechen denen in der rar.txt beschriebenen.
{******************************************************************************}
FUNCTION StartAndWait(CONST ExecuteFile, ParamString: STRING): integer; //http://delphi.about.com/library/weekly/aa040803a.htm {******************************************************************************} VAR SEInfo : TShellExecuteInfo; ExitCode : DWORD; BEGIN Result := 0; IF NOT FileExists(ExecuteFile) THEN Exit; FillChar(SEInfo, SizeOf(SEInfo), 0); SEInfo.cbSize := SizeOf(TShellExecuteInfo); WITH SEInfo DO BEGIN fMask := SEE_MASK_NOCLOSEPROCESS; Wnd := Application.Handle; lpFile := PChar(ExecuteFile); lpParameters := PChar(ParamString); nShow := SW_SHOWNORMAL; END; IF ShellExecuteEx(@SEInfo) THEN BEGIN REPEAT Application.ProcessMessages; // Damit die Prozessorauslastung sinkt :-) Sleep(100); GetExitCodeProcess(SEInfo.hProcess, ExitCode); UNTIL (ExitCode <> STILL_ACTIVE) OR Application.Terminated; Result := Exitcode; END; END; Nikos Variante werde ich mir auch nochmal genauer ansehen. Vielen lieben Dank nochmal, Gina. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 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