Ressourcencontainer

  • Hi,
    mit FileInstall oder Speichern des Binärcodes von Ressourcen direkt im Skript kann ich nur eine vorher festgelegte Quantität und Qualität dieser Ressourcen verwenden. D.h., wenn ich z.B. ein Bild aktualisieren möchte, muß das Skript dann auch neu kompiliert werden.
    Kann man natürlich umgehen, wenn man die Ressourcen auslagert. Dabei ist es jedoch nicht sehr schick, wenn eine Handvoll Dateien im Verzeichnis "rumlungern". Mit nur einer ist das doch viel eleganter.
    Und um es so einfach, wie möglich handhaben zu können, sollte es auch nicht unbedingt in einer Dll landen.
    Deshalb habe ich zwei Tools erstellt, einmal zum Einfügen/Austauschen von Ressourcen in einem Ressourcencontainer und einmal um gezielt Ressourcen aus diesem Container in eine Zieldatei zu installieren.
    Das Erstellen des Containers kann per Kommandozeile oder GUI erfolgen. Bei der GUI-Variante ist sowohl Drag&Drop als auch Auswahl per FileOpenDialog (beides mit Mehrfachauswahl) möglich.
    Soll eine Komponente aktualisiert werden: Container aufrufen mit der Komponente und ein Überschreibflag setzen.
    Dateiname.Suffix der eingefügten Komponenten sind auch die Identifier um die jeweilige Komponente wieder abzurufen.
    Es wird bei jedem Erstellen/Hinzufügen von Komponenten auf eventuell bereits vorhandene Doppel dieser Komponenten geprüft. Ist das Überschreibflag nicht gesetzt, bleiben die vorhandenen Versionen erhalten.
    Wenn ihr mal vergessen habt, was eigentlich im Container enthalten ist: Mit "SourceFromContainer.exe <Ressourcendatei> LIST" werden die Identifier der Komponenten ausgelesen und in die Zwischenablage übergeben.
    Für den Container verwende ich das Suffix *.rbn ( ressourcen binär ). Eine Ressourcencontainer ist folgendermaßen aufgebaut:

    Code
    1. <Dateiname.Suffix>
    2. Binärstring_dieser_Datei
    3. </Name.Suffix>


    Das heißt also auch: NIEMALS eine Containerdatei mit SciTE öffnen! Bei kleineren Dateien mag das noch gehen, aber schon unter 100 kB ist der Binärstring deutlich länger als das, was SciTE verkraften kann. Es schmiert dann einfach ab.


    Es spielt keine Rolle, was ihr in den Container packt. Bilder, Texte für Controls, Sounddateien - alles kann rein. Nur sollte man das nicht als Bibliothek oder Mediathek betrachten. Dazu ist es nicht gedacht. Das kleine Gerümpel, das sonst im Programmverzeichnis dümpelt, soll einen Ruheplatz finden. ;)


    Erstellen eines Ressourcen Containers per Kommandozeile:



    Dateien aus dem Ressourcen Container in das TempDir installieren:



    Edit 17.11.2011:
    Hier mal noch ein Muster, wie man ein Skript gestalten kann, um die Ressourcen mit einem einfachen Kommandozeilenaufruf upzudaten oder zu erweitern.

  • Schöne Idee, ich habs noch nie versucht eine Datei in eine Dll zu packen, aber ist es wirklich so schwer? Bzw ist es schwerer als das was du da gemacht hast ^^


    Du meintest das es sinnvoll ist seine Dateien auszulagern damit man nicht immer die .Exe neumachen muss, aber so muss man doch immer die .rbn neugeladen werden und wenn z.B. 20 Bilder, Musik etc drin ist dann wäre es doch schlecht die alle nochmal neu zu laden oder nicht?


    Ich hab mir deinen Code etc noch nicht angeschaut (Nur den Thread gelesen und das wodrums geht) doch was wäre wenn aus Zufall in dem Binärcode <xx.xx> drinstehen würde, dann würde, das was sicherlich durch StringRegExp returnt wird, durcheinander gebracht werden oder nicht?

  • ich habs noch nie versucht eine Datei in eine Dll zu packen, aber ist es wirklich so schwer? Bzw ist es schwerer als das was du da gemacht hast

    Es ist nicht schwer Daten mit z.B. Ressouce-Editor in einer Dll zu verpacken - aber versuch das mal dynamisch zu machen, sprich bei deinem User im installierten Programm. Das geht in die Hose.
    Wenn du z.B. ein Programm hast, das diverse Module verwaltet und für jedes Modul gibt es z.B. eine Bild auf der GUI, dann mußt du für ein neues Modul auch ein neues Bild nachladen können. Das macht dein Programm dynamisch.

    aber so muss man doch immer die .rbn neugeladen werden und wenn z.B. 20 Bilder, Musik etc drin ist dann wäre es doch schlecht die alle nochmal neu zu laden oder nicht

    Mann muß doch nur das aktualisieren, was erneuert oder neu eingefügt werden soll.

    doch was wäre wenn aus Zufall in dem Binärcode <xx.xx> drinstehen würde, dann würde, das was sicherlich durch StringRegExp returnt wird, durcheinander gebracht werden oder nicht

    Das Programm generiert den Binärcode aus den angegeben Dateien, wie soll dann solch Mist drin stehen? :D