Da immer wieder die Frage aufkommt, wie man selbstextrahiernde Dateien erstellt, habe ich mich mal dran gesetzt und ein Demo dazu programmiert.
Wie es funktioniert:
Startet man die SFXArchiveMaker.exe sieht man ein zwei geteiltes Fenster. Der obere Bereich dient dazu das SFXArchiv zu erstellen. Man wählt Dateien aus (bis 99 Stück) und klickt auf "SFX erstellen". daraufhin werden die Dateien mit copy /b an die datei SFXArchivemaker.exe drangehangen und unter den Namen SFXArchiv.exe im Anwendungsverzeichnis gespeichert. Führt man diese SFXArchive.exe jetzt aus, hat man eigentlich die SFXArchiveMaker.exe vor sich. Jetzt kommt der untere Teil des Fensters zur Anwendung. Klickt man da auch "Entpacken" werden die angehangenen Dateien in das Anwendungsverzeichnis entpackt.
Welche Dateien angehangen wurden steht in einem Header, der ganz zum Schluß angehangen wurde. Im header steht drin: Die Anzahl der angehangenen Dateien und zu dein einzelnen Dateien der Dateiname, die Datei größe und wo sich die Datei in der SFXArchive.exe befindet. Dieser Header ist statisch für 99 Dateien ausgelegt. War einfachher. Denn dann weiß ich immer wie groß er ist und muss das nicht noch dazu schreiben. hat natürlich zur Folge, dass immer 26 KB angehangen werden auch wenn es nur 2 oder 3 Dateien sind.
Was das Demo nicht kann:
- Verzeichnisstruktur beibehalten.
- Packen der Dateien.
- Einen dynamischen Header erzeugen.
- Die Routinen für das Anhängen und Extrahieren behinhalten eine integrierte Fehlerbehandlung. Die
VCL Routinen (ButtonClicks) nicht unbedingt.
Sinn oder Unsinn des Programmes:
Nun, so lange man die Dateien nicht gepackt werden und die Verzeichnis Struktur verloren geht, ist dieses Programm jeden Packprogramm welches SFXArchive erstellen kann natürlich unterlegen. Aber nichts desto trotz kann es als Anschauungsmaterial für weitere Entwicklungen dienen.
Was ich noch machen werde:
Ich werde eine
nonVCL Version machen (ein SFXArchiv, was selbst schon 400 KB groß ist, ist eigentlich ein Witz
). Und ich werde das Programm teilen. Also ein Programm welches die Dateien an ein Programm dranhängt, welches nur entpacken kann. dann werde ich noch eine Version entwicklen, die auch die Verzeichnisstruktur mit speichert.
Das mit dem packen muss ich mal sehen, wenn sich da was kleines finden läßt (
Zlib nutzt Classes), werde ich mal sehen, wie man das noch integrieren kann.
Und wenn ich das dann geschaft habe, dann habe ich was eigenes mit dem ich meine Programme zum Download anbieten kann.
Wichtig:
Kompiliert man das Programm neu, muss man eventeull im Source die Konstante EXEFILESIZE anpassen, da sie angibt, wo die angehängten dateien beginnen und die Exe endet. Anpassen deswegen, weil unterschiedliche Delphi versionen unterschiedlich große Exe-Dateien erzeugen.
Download:
SFXArchiveMaker [61 KB]
Link korrigiert.
Ein Teil meines Codes würde euch verunsichern.