Guck mal hier:
www.michael-puff.de/...er/Delphi/Programme/ -> SFXTools.zip
Und das was du machen willst, ist kein Exe-Packer, sondern ein selbst entpackendes Archiv. Und wenn ich das lese:
Taktaky hat folgendes geschrieben: |
Der exe-Packer soll alle html-Dateien, die in einem Ordner sich befinden zu exe umwandelt |
Dann fehlen dir noch ziemliche Grundlagen, wie so etwas funktionieren könnte. Insofern, glaube ich kaum, dass du was mit meinem Code anfangen kannst.
Das Prinzip ist folgendes:
Es gibt einen Exe-Stub an dem mittles einer anderen Exe die Dateien angehangen werden. Der Exe-Stub bleibt auch weiterhin mit den angehangenen Dateien ausführbar. Zum Entpacken wird der Exe-Stub ausgeführt und kopiert die angehangenen Dateien auf die Festplatte.
Man muss sich dazu aber einiges organisatorisches überlegen, spätestens, wenn man mehr als eine Datei anhängen will:
- Wie speicher ich die Pfade (wenn Unterverzeichnisse mit gepackt werden sollen)?
- Was für eine Struktur brauche ich, um die angehangenen Dateien nachher wieder trennen zu können.
Man könnte zum Beipiel so was machen:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| Exe-Stub Größe Datei 1 Datei1 Größe Datei 2 Datei 2 Größe Datei 3 Datei 3 ... Gesamtgröße aller Dateien plus Größenangaben |
Um die Dateien wieder auslesen zu können, muss man nun am Ende des Exe-Stubs den Wert lesen, der angibt, wie groß alle Anhänge sind. Dann weißman, wo die Exe aufhört und die Daten anfangen. Nun ja und dann liest man eben die Angegeben Anzahl Bytes und schreibt sie auf die Festplatte.
Will man jetzt auch noch die Pafe speichern, reicht es natürlcih nicht nur die Dateigröße zu speichern. Da muss man sich dann eine entsprechende Struktur ausdenken, in der man noch den Pfad speichern kann.
Alternativ ginge auch so was:
Quelltext
1: 2: 3: 4: 5:
| filerecord begin Offset Pfad end |
Und dann am Exe-Stub:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| filerecord 1 Datei 1 fileecord 2 Datei 2 filerecord 3 Datei 3 ... Gesamtgröße aller Dateien plus Größenangaben |
Dann könnte man auch noch einen großen Record an den Anfang oder das Ende schreiben.
Da musst du dir eben was ausdenken.