Fremddateien "includen" (ohne FileInstall)

  • Hi,
    nun im zweiten Anlauf, da der erste Thread sich nicht mehr öffnen ließ:


    Wer sich schon mal näher die Funktion _SQLiteStartUp() in der SQLite-UDF angesehen hat, wird bemerkt haben, dass hier die SQLite Dll geladen wird, ohne dass sie auf dem System installiert ist.
    Das wird gelöst, indem der Inhalt der Dll als Binärstring innerhalb des Includes gespeichert ist und zur Laufzeit temporär die Datei erstellt wird.
    Daraus ergibt sich der Vorteil, dass man nur die reine EXE weitergibt und alle weiteren notwendigen Komponenten (Dll, Bilder etc.) nur temporär generiert.
    Da ich diese Methode in letzter Zeit häufiger nutze, habe ich auch die Erstellung des Binärstrings und der Helperfunktion automatisiert.


    Mit dem Aufruf der Funktion: _CreateTmpBinaryCall($sPath, $sBin='$sData') wird die mit $sPath übergebene Datei als Binärstring in der Variablen $sBin gespeichert. Der Variablenname darf 29 89 Zeichen nicht überschreiten, da sonst die max. Länge einer Befehlszeile überchritten wird.
    Weiterhin wird die Funktion _CreateTmpFile($sFileName, $sBin) erstellt. Diese gibt den Pfad der temporär erzeugten Datei für den übergebenen Binärstring zurück.
    Der erstellte String und die Funktion werden sowohl in die Console als auch in die Zwischenablage ausgegeben.


    Edit 17.9.2011 NEU v1.3
    • Der temporäre Pfad kann ein Direktpfad sein oder eines der Makros @ScriptDir / @TempDir. Die Makros dürfen jedoch nicht als solche übergeben werden, da dann der Pfad sofort gewandelt wird, statt das Makro in die Funktionen einzusetzen. Als Standard (mit Default od. Leerstring) wird @ScriptDir verwendet, für @TempDir muß 'tmp' übergeben werden.
    • Noch ein bischen Funktionskosmetik durchgeführt


    Edit 21.8.2011 NEU v1.1
    Schnuffel hatte eine Idee zur Funktionserweiterung, die ich beim Korrektur lesen noch etwas ausgefeilt habe und herausgekommen aus diesem Brainstorming ist dieses:
    • Übergabe nicht nur einer Datei, sondern eines Strings mit mehreren Pfaden möglich (Trenner: GUIDataSeparatorChar, Standard also: '|')
    • Wird kein Datei-Pfad übergeben, öffnet sich ein Fenster zur Dateiauswahl (auch Multiselect möglich)
    • Der temporäre Pfad ist jetzt wählbar
    • Eine Funktion zur automatischen Löschung der temporären Dateien bei Skriptende, wird bei Bedarf miterstellt
    • Ausgabe in die Konsole erfolgt nicht mehr (Zwischenablage reicht)


    Edit2 21.08.2011
    Grrr, da hatte ich noch einen Bug drin. FileSelectFolder (also kein Pfad übergeben) mit nur einer Datei führte zu einem Fehler - gefixt.


    Hier werden String und Funktion erstellt

    Und das ist das Ergebnis zum Einfügen in das Skript:

  • Es läuft einwandfrei !!!!


    Also jetzt habe ich es auch verstanden, was das Script machen soll.


    Frage:
    Geht das nur mit Bildern, oder kann man so auch Dateien (z. B. Textdateien) in ein Script einarbeiten und wenn es benötigt wird, das dann die Datei z. B. erst erstellt wird?

    ...... Lieben Gruß, ........
    ...........
    Alina ............

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Ich habe die Deutsche Hilfe auf meinem PC und
    OrganizeIncludes ist beim Scripten mein bester
    Freund. Okay?

  • Sollte mit allen Dateien gehen, die werden ja im binär-Mode gelesen!

  • Hallo bernd670.


    Habe ich Dich jetzt richtig verstanden? Ich brauche die Dateien dann gar nicht mehr (so wie bei FileInclude) erst auf die HDD "entpacken" lassen, sondern er ließt das aus dem binärcode aus? Wäre ja mal wieder was, wo ich es kaum glauben kann es es geht. Aber ich bin ja eine Userin, die immer für neue Sachen zu haben ist.

    ...... Lieben Gruß, ........
    ...........
    Alina ............

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Ich habe die Deutsche Hilfe auf meinem PC und
    OrganizeIncludes ist beim Scripten mein bester
    Freund. Okay?

  • Hi,
    schönes Script :), auch wenn das schon oft umgesetzt wurde ...
    Aber mal ne Frage. Wo ist der Vorteil zu FileInstall. Wenn die Dateien jetzt nicht temporär abgelegt werden müssten, würd ich einen Vorteil sehen, aber eigentlich hat das Script doch genau den gleichen Effekt wie FIleInstall.


    anno2008

  • Gut wäre es, wenn die temporär Datei hundertprozentig sicher zu löschen wäre.

    ...... Lieben Gruß, ........
    ...........
    Alina ............

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Ich habe die Deutsche Hilfe auf meinem PC und
    OrganizeIncludes ist beim Scripten mein bester
    Freund. Okay?

  • Geht das nur mit Bildern, oder kann man so auch Dateien (z. B. Textdateien) in ein Script einarbeiten und wenn es benötigt wird, das dann die Datei z. B. erst erstellt wird?


    Wie Bernd schon sagte: Geht mit allen Dateien. Aber bei Text ist es nun nicht notwendig, den kannst du ja im Klartext speichern.
    Ich verwende es auch um integrierte Dateien 'unsichtbar' zu halten. Nicht, damit der User nix von weiß, sondern um dem Urheberrechtschutz Genüge zu tun. So kann der User nicht direkt auf das eingebundene Material zugreifen.


    Aber mit FileInstall hab ich doch auch nur 1 Datei?


    Aber nicht mehr nach dem ersten Run. Dann hast du die EXE plus per FileInstall installierte Dateien.
    Mit dieser Methode hast du immer nur die EXE.


  • Aber nicht mehr nach dem ersten Run. Dann hast du die EXE plus per FileInstall installierte Dateien.
    Mit dieser Methode hast du immer nur die EXE.


    Sry, dass ich nochmal so blöd nachfrage, aber irgendwie gibt das keinen so richtigen Sinn für mich.
    Wenn ich eine Datei mit FileInstall eingebunden hab und starte das Script, dann werden die eingebundenen Dateien in einen Ordner auf dem PC kopiert (z.B. TempDir).


    - So, dann hab ich also die EXE-Datei (wo die Original eingebundenen Dateien drin sind) und die Dateien auf dem PC in TempDir.
    - Bei deiner Lösung hab ich die EXE-Datei (wo die Dateien halt binär drin sind, aber genauso viel Speicherplatz wegnehmen) und die Dateien auf dem PC in TempDir.


    Ist das jetzt nicht genau das gleiche, oder mache ich irgendwo einen Denkfehler?


    anno2008

  • Erstmal keine schlechte Idee. Ist eigentlich sehr praktisch.


    Habe aber auch mal eine Frage und zwar ließe es sich machen, dass man z.b. eine .Txt Dtei "includet", diese dann während des Programmlaufes ändert und dann wieder einspeichert?

  • Hallo.


    Habe gerade mal einen Vergleich durchgeführt "FileInstall" ./. "BinärInstall"
    (BinärInstall = Fremddateien "include" ohne FileInstall)



    "FileInstall" ./. "BinärInstall"
    Dateigröße der au3-Datei: 6.958 ./. 14.229 (wobei die Bilddateigröße mitgerechnet wurde)
    Dateigröße der Exe-Datei: 297.685 ./. 625.755
    Dateien bleiben auf dem PC: ja ./. nein


    Ich frage mich, wo die Bilddateien auf dem PC zu finden sind, wenn das Programm läuft. Habe die Bildnamen als Suche eingegeben, aber nicht gefunden außer dort wo sie seit Wochen eh liegen. Also waren das nicht die die durch Oscar's Script temponär gespeichert sind.
    Kann mir das jemand verraten? Petzen ist hier mal erlaubt ;-)

    ...... Lieben Gruß, ........
    ...........
    Alina ............

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Ich habe die Deutsche Hilfe auf meinem PC und
    OrganizeIncludes ist beim Scripten mein bester
    Freund. Okay?

  • Der Name _CreateTmpBinaryCall und das @TempDir sagt doch schon alles :D
    Aber ich weiß nicht, ich fühle mich irgendwie immer noch recht dumm, was den Nutzen der Funktion betrifft..


    Ich hab deine Funktion auch an mehreren Bildern getestet, die alle wie bei FileInstall nicht in 1 Datei sondern jeweils in 1 Datei erstellt wurden und nicht nach Programmende gelöscht wurden..
    Also wo liegt nochmal der Unterschied zu FileInstall..?


    Gibt es quasi 1 Weg, bei dem der User 0 Chance hat die Dateien/Bilder einzusehen und zu kopieren?

    ¨ ¸„ø¤º°¨„ø¤º°¨°º¤ø„¨°º¤ø„ø¤º°¨ Surf the flow! °º¤ ø¤
    ¨°º¤ø„ ¸AUTOIT FTW! º¤ø„, „,ø¤º ¨°º¤ø„¸,ø¤º°º¤ø o(>'.')>
    ¸„ø¤º°¨¸„ø¤º „¸¨°º¤ø„¸¸ø„ ¸„ø¤º „¸ by ChaosKeksº " ""

  • Was das Einbinden von Bildern etc. angeht, so bleibt sich das sicher mit Fileinstall letztendlich gleich.
    Ein echter Vorteil (im Handling) ergibt sich beim Einbinden von Dll als Name.dll.au3. Diese kann man dan einfach per #include in das Skript einbinden, ohne sich um den Dateipfad zu kümmern. (s. SQLite-UDF)


    Edit: Ein deutlicher Unterschied zum FileInstall - Du darfst Variablen und Makros verwenden. :D

  • Wenn ich Ctrl + V drücke, kommt sowas dabei raus: