Erstellen einer Selfextracting-EXE während Programmlaufzeit?



  • Also ich beschreibe hier mal mein Problem:

    Ich möchte ein Programm verwirklichen, mit welchem man Dateien auswählen kann, die in eine EXE gepackt werden und das Programm darauf diese selbstentpackende EXE ausgibt bzw. erstellt.

    (Kommt aber jetzt nicht mit den vordefinierten Funktionen von der ZIP Lib oder anderen Archivier Bibliotheken.)

    Ansatz: Die Dateien die man auswählt kommen an das Ende der EXE. Anhand der leeren Größe der EXE hätte man die Startadresse an dem das Filepack anfängt; die Grössen der Files müsste man auch noch feststellen, damit man auch richtig das Filepack ausliest.

    So jetzt bräuchte ich eure Hilfe sowie einige Ansätze (anhand von Sourcecodes), wie man diese Dateien ans Ende einer EXE stellt und diese auch erstellt, welche sich selbst entpackt, wenn man sie ausführt.

    Schonmal recht herzlichen Dank für die Hilfe und die Aufmerksamkeit.

    Bitte bleibt produktiv beim Antworten und sagt bescheid, wenn ich mich unklar ausgedrückt habe bzw. wenn ihr was nicht richtig verstanden habt!

    (WINAPI-Forum, weil ich dieses Projekt mit der Windows API schreiben will.)

    .:Buster



  • Du solltest dir eben ein Format überlegen, wie du die Dateien / Verzeichnisse speichern willst, und dass hängst du diese Daten als Resource an deine Anwendung an (BeginUpdateResource, UpdateResource und EndUpdateResource).

    Hier solltest du alles weitere notwendige dazu finden 🙂



  • Danke, flenders! 🙂

    Jedoch, wie erstelle ich eine EXE während der Programmlaufzeit mit Entpackinformationen und dem Entpackungsalgorithmus?

    Und noch ne Frage nebenbei: Gibt es eine Möglichkeit Files aus einem Ordner und deren Unterordner auszulesen bzw. deren Pfad und Name zu erhalten?

    //edit: Hast du schonmal etwas ähnliches geschrieben @ flenders?

    .:Pointer



  • Häng die Dateien an eine bestehende Exe dran, welche sie extrahieren kann. Als Beispiel, kannst du dir meine SFXTools von meiner HP ankucken.



  • Ja, so etwas hab ich gesucht. Jedoch fällts mir schwer jetzt auf einmal in Delphi zu denken. Hast davon auch noch ne C++ Version? Danke. 🙂

    .:Pointer



  • Nein. Aber das Prinzip ist das gleiche. Und die Befehle sind wohl selbstredent. 😉



  • Pointer schrieb:

    Jedoch, wie erstelle ich eine EXE während der Programmlaufzeit mit Entpackinformationen und dem Entpackungsalgorithmus?

    Wie Luckie schon sagte: du machst einfach eine Anwendung, die Ressourcen aus sich selbst extrahieren / entpacken kann und an diese Datei hängst du eben dann deine Daten entsprechend dran.

    Pointer schrieb:

    Und noch ne Frage nebenbei: Gibt es eine Möglichkeit Files aus einem Ordner und deren Unterordner auszulesen bzw. deren Pfad und Name zu erhalten?

    Schau mal in die FAQ 😉

    Pointer schrieb:

    Hast du schonmal etwas ähnliches geschrieben @ flenders?

    Nein, das waren nur so Ideen, wie ich mir denke, dass es gemacht wird 🤡



  • Ich mache es _nicht_ mit Ressourcen. Ich hänge die Dateien einfach hintendran. Die Exe bleibt dabei ausführbar ohne dass man sie noch manipulieren muss. Die Exe muss nur wissen, wie groß sie ist, damit sie weiß, wo die Daten anfangen.



  • Erstmal danke für eure Beiträge! 🙂

    Ich kenne ein Tool, das ein sogenanntes MPQ Archiv in eine EXE packt. Mit dieser EXE kann man dann später ein Spiel temporär patchen, indem die EXE diese enthaltene MPQ in den Speicher des Spielprozesses hinzufügt.

    Das Tool besteht nur aus einer(!) EXE, mehr benötigt dieses Tool nicht. Keine DLL, keine zusätzliche EXE mit Entpackungsalghorithmus.

    So, how was it done?! ._°

    Der Typ der dieses Tool gecodet hat will keinerlei Informationen rausrücken, weil er seinen Code "Top-Secret" halten will. Find ich doof, denn fast alle Freeware-Tools bieten auch gleichzeitig ihren Sourcecode an. Vielleicht hält er sich für was Tolles. ^^

    //edit: Naja, eine Info hat er rausgerückt. Er schreibt die Ressourcen und Infos per WriteFile in die SEMPQs (SelfXtracting MPQ Archives).

    //edit2: MPQs werden von folgenden Spielen benutzt: Diablo II, Warcraft III, Starcraft, ... (produced by Blizzard)

    .:Pointer



  • Ich verstehe jetzt dein Problem nicht. Luckie hat doch gesagt wies geht. Hinten dran hängen. Da brauchst du auch nichts zusätzliches


Anmelden zum Antworten