Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zugriffsverletzung bei Aufruf von unrar.dll? (https://www.delphipraxis.net/154867-zugriffsverletzung-bei-aufruf-von-unrar-dll.html)

DelphiCreak 28. Sep 2010 16:55

Delphi-Version: 5

Zugriffsverletzung bei Aufruf von unrar.dll?
 
Guten Abend liebe DP.

Ich Programmiere im Moment einen Auto-Updater für eines meiner Programme. Das Herunterladen funktioniert soweit, er lädt fein das WinRAR-Archiv runter,
so wie er es soll. Nun zum eigentlichem Problem: Ich will dieses Archiv mithilfe der DFUnRar-Komponente entpacken, doch sobald ich die entsprechende Prozedur aufrufe, erhalte ich einen Fehler a la "Zugriffsverletzung in Modul unrar.dll". Wenn ich dasselbe Rar Archiv mithilfe der mitgelieferten Demo-Komponente entpacke läuft es fehlerfrei. Vielleicht findet ihr dabei den Fehler, hier der entsprechende Source:

Delphi-Quellcode:
var
  DFUnRar: TDFUnRar; //Variable, die die Instanz des Objektes enthalten soll
begin
  DFUnRar := TDFUnrar.Create(Self); //Instanz des Objektes erzeugen
  try //ab hier alle Fehler abfangen, damit das Objekt auf jeden Fall freigegeben wird
    with DFUnRar do
    begin
      FileName := ExtractFilePath(ParamStr(0)) + 'TestFolder.rar'; //Dateiname des Archives angeben
      Directory := ExtractFilePath(ParamStr(0)) + 'Temp'; //Ausgabeverzeichnis (darf nicht auf \ enden!)
      ForceDirectories(Directory); //sicherstellen, dass temporäres Ausgabeverzeichnis auch existiert
      FileList.Clear; //Dateiliste der zu entpackenden Dateien leeren
      //Befindet sich die Datei in einem Unterverzeichnis im Archiv, so muss auch dieses mit angegeben werden
      Mode := DFRAR_EXTRACT; //Extract kann Dateien entpacken oder nur Inhaltsverzeichnisse erstellen (DFRAR_LIST)
      OverrideEvent := OR_NEVER; //Ist die Datei im Ausgabeverzeichnis bereits vorhanden, so auf keine Fall überschreiben (Alternative OR_ALWAYS)
      Extract; //Nun aber los ;-)
    end;
  finally
    DFUnRar.Free; //und nicht vergessen: Objekt auf brav wieder freigeben
  end;
Danke im Vorraus

[EDIT] Hat sich erledigt, hatte sich ein Fehler in den Pfad eingeschlichen -.-"
Code ist hier in der DP gesucht worden.[/EDIT]

Helmi 28. Sep 2010 17:24

AW: Zugriffsverletzung bei Aufruf von unrar.dll?
 
Hallo,

hat zwar nichts mit dem Problem zu tun, aber vielleicht solltest du noch prüfen ob wirklich alle Verzeichnisse vorhanden sind/erstellt worden sind.

Delphi-Quellcode:
      If ForceDirectories(Directory) then //sicherstellen, dass temporäres Ausgabeverzeichnis auch existiert
        begin
          FileList.Clear; //Dateiliste der zu entpackenden Dateien leeren
          //Befindet sich die Datei in einem Unterverzeichnis im Archiv, so muss auch dieses mit angegeben werden
          Mode := DFRAR_EXTRACT; //Extract kann Dateien entpacken oder nur Inhaltsverzeichnisse erstellen (DFRAR_LIST)
          OverrideEvent := OR_NEVER; //Ist die Datei im Ausgabeverzeichnis bereits vorhanden, so auf keine Fall überschreiben (Alternative OR_ALWAYS)
          Extract; //Nun aber los ;-)
        end
      else
        begin
          //Irgendwas machen wenn die Verzeichnisse nicht vorhanden sind/erstellt worden sind.
        end;
In diesem Fall gibt ForceDirectories auch true zurück wenn die Verzeichnisse schon vorhanden sind und nicht mehr erstellt werden müssen.
Deswegen kann man auf
Delphi-Quellcode:
DirectoryExists
verzichten

DelphiCreak 29. Sep 2010 16:43

AW: Zugriffsverletzung bei Aufruf von unrar.dll?
 
okey, danke ;) hab das problem auch soweit schon gelöst, ist nen bisschen schwierig mit den richtigen Pfaden bei DFUnrar.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz