AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte SFXer - Ein SFX-zlib-Packer

SFXer - Ein SFX-zlib-Packer

Ein Thema von Hador · begonnen am 18. Okt 2005 · letzter Beitrag vom 18. Okt 2005
Antwort Antwort
Benutzerbild von Hador
Hador
Registriert seit: 11. Dez 2004
Auf längere Sicht habe ich vor, mir ein eigenes Setup-Tool zu schreiben. Als Vorbereitung auf dies, habe ich jetzt erst einmal ein SFX Tool entwickelt, welches (auch mehrere Dateien) mit Hilfe der zlib packt und an eine Echse dranhängt, so dass sich das ganze von selbst auch wieder entpacken lässt.

Was noch fehlt:
  • Den Dateinamendialog im Packer durch einen SaveDialog ersetzen //EDIT: Nur noch in der Parameterversion//
  • Verzeichnisstrukturen mit Packen
  • Versuchen das SFX Modul noch weiter zu verkleinern (z.Z. 47,5 kb)

Ich habe 2 Verschiedene Versionen erstellt.
Die erste (SFXer) werden die zu packenden Dateien per Parameter übergeben (as ganze soll später über Senden An laufen)
Die zweite (ODSFXer) hat einen OpenDialog, in dem die Dateien ausgewählt werden können.

Ich würde mich freuen, wenn einige das Tool mal testen könnten.
Die angehängten Dateien wurden übrigends auch mit diesem Tool erstellt.

EDIT: Nur die Packer.exe ist wichtig. SFX.exe ist das Modul, wo die Dateien rangehängt werden. Und das erwartet, das mindestens eine Datei rangehängt ist. Daher sollte es nicht so ausgeführt werden.
Angehängte Dateien
Dateityp: exe sfxer_145.exe (251,6 KB, 10x aufgerufen)
Dateityp: exe dsfxer_170.exe (308,0 KB, 12x aufgerufen)
http://www.larskiesow.de

Computer gehorchen deinen Befehlen, nicht deinen Absichten.
 
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#2
  Alt 18. Okt 2005, 15:59
Wie bedient man das? Ich habe ein sfx-Archiov erstellt und ahtte dann im Verzeichnis eine SFX.exe (48 KB) und eine ODPacker.exe (408 KB).

Nach dem Ausführen der SFX.exe bekam ich folgende Fehler:
Zitat:
---------------------------
SFX.exe - Fehler in Anwendung
---------------------------
Die Ausnahme "Unbekannter Softwarefehler" (0x0eedfade) ist in der Anwendung an der Stelle 0x77e9bc3f aufgetreten.


---------------------------
OK Abbrechen
---------------------------
Zitat:
---------------------------
Anwendungsfehler
---------------------------
Exception EConvertError in Modul SFX.exe bei 00006EC2.

'' ist kein gültiger Integerwert.


---------------------------
OK
---------------------------
Wie hast du die zLib so klein bekommen, dass sie nonVCL ist?

Kannst du mir mal das Prinzip erläutern? Ich habe bei meinem SFX-Tools einen Dateiheader mit den den im Archiv enbthaltenen Dateien und deren Größen. Du müsstest dann ja beim Erstellen des SFX-Archives wissen, wie großt die dateien genau sind, wenn sie gepackt sind oder?
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Hador
Hador

 
Turbo Delphi für Win32
 
#3
  Alt 18. Okt 2005, 17:11
Hab vergessen zu sagen, dass nur die Packer.exe wichtig ist. SFX.exe ist das Modul, wo die Dateien rangehängt werden. Und das erwartet, das mindestens eine Datei rangehängt ist.

In dem nachher erstellten inputDialog kannst du dann den Dateinamen des SFX archieves angeben.

Beim aneinanderhängen der Dateien muss ich zugeben, dass ich etwas geschummelt habe. Dafür habe ich folgenden Code aus dem EDH benutzt:

Delphi-Quellcode:
procedure Join(Main_FileName, Hidden_Filename : string);
var
  MainFile : TFileStream;
  HiddenFile : TFileStream;
  SizeOfFile : Cardinal;
  SearchWord : string[10];
begin
  MainFile := TFileStream.Create(Main_FileName, fmOpenReadWrite or fmShareDenyWrite);
  try
    SizeOfFile := MainFile.Size;
    HiddenFile := TFileStream.Create(Hidden_Filename, fmOpenRead or fmShareDenyNone);
    try
      MainFile.Seek(0, soFromEnd);
      MainFile.CopyFrom(HiddenFile, 0);
      MainFile.Seek(0, soFromEnd);
    finally
     HiddenFile.Free;
    end;
    SearchWord := IntToStr(SizeOfFile) + #0;
    MainFile.Seek(0, soFromEnd);
    MainFile.WriteBuffer(SearchWord, SizeOf(SearchWord));
  finally
   MainFile.Free;
  end;
end;
Und zum splitten
Delphi-Quellcode:
procedure Split(Main_FileName, NewFromMain_Filename : string);
var
  MainFile : TFileStream;
  SplitFile : TFileStream;
  HelpStr : string[10];
  GetSize : integer;
begin
  MainFile := TFileStream.create(Main_FileName, fmOpenReadWrite or fmShareDenyWrite);
  try
    SplitFile := TFileStream.Create(NewFromMain_Filename, fmCreate or fmShareDenyNone);
    try
      MainFile.Position := MainFile.Size - 11;
      MainFile.Read(HelpStr, 10);
      GetSize := StrToInt(HelpStr);
      MainFile.Position := GetSize;
      SplitFile.CopyFrom(MainFile, MainFile.Size-GetSize);
      SplitFile.Size := SplitFile.Size - 11;
      MainFile.Size := GetSize;
    finally
     SplitFile.Free;
    end;
  finally
   MainFile.Free;
  end;
end;
Das einzige was man im SFX Modul sieht ist Der Pfadauswahldialog. Diesen habe ich mittels der WinAPI Funktion SHBrowseForFolder aufgerufen.

Ansonsten habe ich einfach die zlib eingebunden, die zusammengepackten Dateien (Ich habe noch ne Datei, wo alle Dateinamen drinstehen mit angehängt) damit komprimiert und das ganze dann an das SFX-Modul angehängt.

Zitat:
Wie hast du die zLib so klein bekommen, dass sie nonVCL ist?
Also wenn ich die zlib in ein Konsolenprogramm einbinde, ist das Programm 85 kb groß. Mit UPX komprimiert (is auch sfx.exe) noch 38,5 kb
Lars Kiesow
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:26 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