![]() |
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 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