Laden...

Selbstextrahierende Zip-Exe mit SharpZipLib ?

Erstellt von macyog vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.928 Views
M
macyog Themenstarter:in
3 Beiträge seit 2008
vor 16 Jahren
Selbstextrahierende Zip-Exe mit SharpZipLib ?

Moin zusammen,

ich hoffe mal, dass ich hier im richtigen Forum bin, da ich hier schon so einiges zu der SharpZipLib gelesen habe.

Für ein Projekt brauche ich die möglichkeit Zip-Dateien als selsbtextrahierde EXE erzeugen zu können.

Nur, ich kann nicht wirklich etwas dazu finden.
Ich wäre für ein paar Tips u. Anregungen, ob das überhaupt mit C# realsierbar ist dankbar. Andernfalls müßte ich auf ein externes Programm zurückgreifen ... und das reizt mich ja nun gar nicht 😉

Packen und Entpacken habe ich bereits mit der SharpZipLib zur Zufriedenheit realisieren können.

Vielen Dank erstmal

Schöne Grüße

Hagen

2.760 Beiträge seit 2006
vor 16 Jahren

Du musst das gezippte Paket als Resource in dein Programm bauen und dann zur laufzeit entpacken, altnerativ das Paket einfach ans Ende des Assemblies hängen und dann von dort aus mit dem FileStream rauslesen und entpacken (k.A. ob das wirklich geht).

L
770 Beiträge seit 2006
vor 16 Jahren

Hallo,

soweit ich das verstanden habe, will er nicht ein Zip entpacken, sondern eher eines zu erstellen.

Hier steht:

Offers zip file splitting and spanning, self-extracting files, in-memory read/write, and Deflate64™. Streaming Compression for .NET is a powerful pass-through stream that can be wrapped around .NET streams.

Also würde ich sagen, können tut es das, nur wie 🙂 eventuell mal durch die Doku / Homepage der Entwickler wühlen.

lg Lion

lg Lion

2.760 Beiträge seit 2006
vor 16 Jahren

Für ein Projekt brauche ich die möglichkeit Zip-Dateien als selsbtextrahierde EXE erzeugen zu können.

Achso, jetzt hab ichs 😉 Da sehe ich keine andere Möglichkeit als eine z.B. "Extractor.exe" zu bauen die jedes mal wenn ein selbstextrahierendes Archiv erstellt wir kopiert und "konterminiert" 😉 wird. Also ans Ende des Assemblies anhängen, dein Packprogramm muss halt wissen wo das Assembly zum entpacken aufhört und die Datei dann "aufbohren".

Alternativ mal schauen ob sich da was mit dem Compiler machen lässt:
http://www.codeproject.com/KB/cs/CSharpScript.aspx <- Compiler 😉

M
macyog Themenstarter:in
3 Beiträge seit 2008
vor 16 Jahren

Danke für die Antworten!!

Also wenn ich das richtig verstanden habe, soll ich eine Extracting.ExE in C# erstellen. Da wirft sich mir die Frage auf, ob das so gut ist. Ist ein .Net-Framework nicht vorhanden, wird das dann ja auch nicht gehen, richtig?

Das ist nur mal so eine Überlegung in den blauen Dunst hinein.

Die Sache mit dem "konterminieren" hab ich nicht verstanden, dafür fehlt mir vielleicht auch etwas Wissen. Bitte um eine kleine "Aufklärung".

Danke

2.760 Beiträge seit 2006
vor 16 Jahren

Ja das DotNet Framework wirst du wohl dafür brauchen, du willst ja schließlich auch die SharpZipLib einsetzen und die ist in C# geschrieben 😉
"Konterminieren" ging mir in dem Zeitpunkt als ich das geschrieben habe einfach so durch meinen kranken Kaffeevollgedröhnten Kopf.

Ich meinte das du eine Anwendung (meinetwegen auch in C/C++, Delphi, PHP 😉 etc.) erstellen musst die auch die komprimierten Daten enthält, das kannst du entweder realisieren indem du das Archiv als Ressource einbettest und dann wieder zu Laufzeit ausließt oder indem du diese .exe einfach vorhältst und jedes mal wenn ein neues selbst extrahierendes Archiv erstellt wird kopierst und das Archiv hinten an die .exe dranhängst.

Wenn du das Archiv als Ressource einbetten möchtest musst du für jedes selbst extrahierende Archiv die .exe die das Archiv beinhaltet und zur Laufzeit entpacken soll neu kompilieren (was mit dem dotnet compiler nicht sonderlich schwierig sein sollte).

Bei der anderen Variante hast du immer die selbe .exe die generische Funktionen zum finden und entpacken des angehängten Archivs zur Laufzeit beinhalten muss. So was könnte in etwas folgendermaßen realisiert werden:

  1. Die Anwendung weiß wie lang sie selbst ist
  2. Sie lädt sich z.B. mit einem FileStream selber und sucht die Stelle an der sie endet, dort fängt dann das Archiv an
  3. Das Archiv wird entpackt.
2.760 Beiträge seit 2006
vor 16 Jahren

Hier eine Saudreckerte implementierung