Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Returncode von WinRar (https://www.delphipraxis.net/38612-returncode-von-winrar.html)

Gina 21. Jan 2005 18:51


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:

Wenn RAR endet, setzt es die Umgebungsvariable ERRORLEVEL auf einen Wert, der
dem Grund für die Beendigung (termination status) entspricht...
Hat zufällig jemand einen Tipp für mich, wie ich diesen Returncode abfrage?

Vielen Dank, Gina.

PS: Die besagte Umgebungsvariable kann ich bei mir nirgends finden...

Niko 21. Jan 2005 19:05

Re: Returncode von WinRar
 
Hi,

mit MSDN-Library durchsuchenFindEnvironmentString sollte sich das herausfinden lassen

Gina 22. Jan 2005 11:03

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.

Niko 22. Jan 2005 13:02

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:
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;
Aufruf mit:
Delphi-Quellcode:
Label1.Caption := GetEnvVar('PATH');

Gina 22. Jan 2005 16:26

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.

SirThornberry 22. Jan 2005 16:55

Re: Returncode von WinRar
 
das ist eine umgebungsvariable die nirgends declariert wurde.
in batchdateien konnte man mit
Code:
if errorlevel == 5
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

Gina 22. Jan 2005 17:23

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.

SirThornberry 22. Jan 2005 17:31

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))

Gina 22. Jan 2005 19:24

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.

Niko 24. Jan 2005 21:34

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.
Seite 1 von 2  1 2      

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