Programmeinstellungen als Resource?



  • Hey!

    Ein Programm soll ein paar Einstellungen speichern. Ohne denen wäre es eine einzige .exe aber leider muss nun eine separate .ini Datei her, oder kann ich diese in der .exe haben?

    Lesen geht, das weiß ich, aber schreiben? Kann sich die .exe selbst verändern? Ich bezweifle es ABER würde es nicht funktionieren wenn die größe der Datei immer gleich bleibt? Mache ich halt lauter Nullen rein als Platzhalter.

    Geht das?
    Danke!
    MfG


  • Mod

    Vergiss das einfach.
    1. Da wo ein Programm normlaerweise steht (C:\Program Files) hat ein "normaler" Anwender keine Rechte etwas zu ändern.
    2. Darf nicht jeder Use reigene Einstelungen haben.
    3. Was ist mit der Registry HKCU oder den entsprechenden Ordnern die die Shell vorsieht (CSIDL_APPDATA, CSIDL_LOCAL_APPDATA etc.)



  • Verstehe nicht was du meinst.

    1. Was ist ein "normaler" Anwender? Ich gehe in meinem Fall davon aus dass man Admin ist.

    2. Hä?

    3. Ne ich müll doch nicht die Registry voll, mein Programm wird nicht installiert sondern einfach die .exe ausgeführt.

    Geht das nun mit den Einstellungen als Resource in der .exe?

    MfG



  • Frage2 schrieb:

    3. Ne ich müll doch nicht die Registry voll, mein Programm wird nicht installiert sondern einfach die .exe ausgeführt.

    Ich versthe nicht was du meinst. Man braucht keine Installationsroutine, damit das Programm Werte in die Registry schreibt. Genau dafür ist ja die Regestry vorgesehen, um kleinere Daten wie z.B. "FullScreen = 1", "Backgroundcolor = \0x12345678" "Progpath = C:\Programme\blablabla" zu speichern. Um größere Datenmengen zu speichen kann man das auch in einer extra Datei machen.



  • Frage2 schrieb:

    Geht das nun mit den Einstellungen als Resource in der .exe?

    Einerseits: Das Betriebssystem verweigert auch dem Admin gegenüber Schreibzugriffe auf eine "laufende" .exe. Geht also nicht.

    Andererseits: Ginge es doch, dann würden sämtliche installierten Virenscanner durchdrehen.



  • @Benutzername..
    Und wer entfernt die Einträge dann wieder, wenn der Benutzer das Programm nicht mehr will?

    @exekenner
    Ok danke, dann komm ich um eine extra .ini Datei wohl nicht herum.

    Mir gings ja nur darum dass man die .exe einfach auf den Desktop setzen kann, jetzt muss man halt einen extra Ordner anlegen und eine Verknüpfung machen denn eine .ini hat am Desktop wohl bei den wenigsten etwas verloren.

    MfG


  • Mod

    Frage2 schrieb:

    1. Was ist ein "normaler" Anwender? Ich gehe in meinem Fall davon aus dass man Admin ist.

    Wenn ein Programm unter Vista gestartet wird dann ist man eben kein Admin, selbst wenn Du als Admin eingetragen bist. Davor steht UAC und der Admin Prompt!

    Frage2 schrieb:

    2. Hä?

    Wenn Deine EXE in einem öffentlichen Verzeichnis steht, dann hat der nächste User wohl mit den selben Programmeinstelungen zu leben. Ganz und gar wenn die Einstellungen in der EXE liegen!

    Frage2 schrieb:

    3. Ne ich müll doch nicht die Registry voll, mein Programm wird nicht installiert sondern einfach die .exe ausgeführt.

    Du hast echt Ahnung... was?
    Zumüllen wenn es um Deine 5 Bytes Einstellung geht....
    Wo ist der Unterschied zu einer Datei? Ene Datei nimmt sogar noch mehr Platz weg als in der Registry ein Eintrag.

    Frage2 schrieb:

    Geht das nun mit den Einstellungen als Resource in der .exe?

    Das habe ich doch geschrieben... Solange Du Schreibrechte hast ja. Siehe MSDN. Außer einem Virenscanner gefallen solche Aktivitäten auch nicht.



  • Ich hab's nicht ausprobiert aber die Beschreibung hört sich vielversprechend an!
    http://www.codeproject.com/KB/cpp/UpdateResource.aspx



  • Martin Richter schrieb:

    Wenn ein Programm unter Vista gestartet wird dann ist man eben kein Admin, selbst wenn Du als Admin eingetragen bist. Davor steht UAC und der Admin Prompt!

    Wer Vista nutzt ist selbst schuld und muss dann eben mit solchen Problemen zurechtkommen.

    Martin Richter schrieb:

    Wenn Deine EXE in einem öffentlichen Verzeichnis steht, dann hat der nächste User wohl mit den selben Programmeinstelungen zu leben. Ganz und gar wenn die Einstellungen in der EXE liegen!

    In meinem Fall ist das egal.

    Martin Richter schrieb:

    Du hast echt Ahnung... was?
    Zumüllen wenn es um Deine 5 Bytes Einstellung geht....
    Wo ist der Unterschied zu einer Datei? Ene Datei nimmt sogar noch mehr Platz weg als in der Registry ein Eintrag.

    Wiegesagt, wer löscht die Einträge dann wieder? Und vielleicht werden es auch mehr Daten... Wenn jeder Programmierer so denken würde... 🙄

    Martin Richter schrieb:

    Das habe ich doch geschrieben... Solange Du Schreibrechte hast ja. Siehe MSDN. Außer einem Virenscanner gefallen solche Aktivitäten auch nicht.

    Nein hast du nicht. OK, @exekenner meinte halt es geht nicht.

    MfG



  • .... hmmm ein Tipp vielleicht.

    Wenn du immer unter NTFS bist, denke an alternate DataStreams.
    Da kann man hinter dem Programmnamen eine Menge Zeugs wegsaven.

    Meine Dienste greifen alle auf ADS zurück - um nicht aufzufallen 😉



  • CStern schrieb:

    Meine Dienste greifen alle auf ADS zurück - um nicht aufzufallen

    Gut zu wissen. 👎



  • Klar.

    Weil eine Datei mit 0 Bytes Größe ...
    NTFS ist Geil.

    Meine Proggies schreiben einfach alles nach unten ab. Das hat den Vorteil: Klaut einer Die Exe, hat er ein großes Problem, weil die NTFS die ADS nicht mit kopiert. Ich schreibe nur single Exes. Daher weht der Wind.

    Ich hoffe das beruhigt wieder.



  • CStern schrieb:

    Meine Proggies schreiben einfach alles nach unten ab. Das hat den Vorteil: Klaut einer Die Exe, hat er ein großes Problem, weil die NTFS die ADS nicht mit kopiert.

    😕

    Ach und ich finde keine Referenz zum ADS API, nur das: http://msdn.microsoft.com/en-us/library/aa364232
    Welche Funktionen brauche ich da um mein Vorhaben zu realisieren?

    MfG



  • Tja. Das ist das Schisma, warum ich niemals irgend ein FrameWork oder MFC-Bullshit von M$ verwende.

    Sie verwenden vieles einfach nur für sich.

    Aber es gibt viele Dinge, die einfach undokumentiert sind, genauso geht das mit Alternate Datastreams.

    Damit wirst Du sicher im Internet fündig. Man muss sich halt mal anstrengen und nicht gebratene Täubchen ala Microschrott präsentieren lassen. 😡



  • Jo, gut so. Es lebe natives C++.

    Ehm der Dreck ist eh erst ab Vista verfügbar seh ich grad -.- (FindFirstStreamW, ...)
    Gut, dann wird es eine separate .ini Datei was, solls.

    MfG



  • Immer noch der falsche Dampfer ... Bis Richmond reicht es vielleicht.

    Außerdem ist ADS nicht Bestandteil von VISTA sondern es ist ein Feature von NTFS. Und das ist halt uralt mittlerweile.

    Alternate Datastreams werden in NTFS einfach durch einen Punkt ->.<- vom Dateinamen als eigenständiges File mitcreiert. Sodann haben sie die genau gleiche Funktionalität wie die Exe darüber, aber sie sammeln Daten, wenn man sie danach programmiert.

    Die Anzahl von Proggs, die zur Zeit ADS verwenden ist erschreckend hoch.



  • Hmm hab da noch das gefunden:

    http://msdn.microsoft.com/en-us/magazine/cc163677.aspx

    Mal sehen, vielleicht nutze ich Figure 2, Figure 3 versteh ich jetzt nicht.
    NTQueryInformationFile ist mir zu heikel (Könnte geändert/entfernt werden).
    Kompatibilität ist mir nicht unwichtig.
    Und sind ADS' nicht auch problematisch wegen AntiViren?
    Hab da schon Probleme wenn ich nur "OpenProcessToken()" verwende schlagen gleich 15 verschiedene AntiViren an... (laut virustotal.com).

    MfG


Anmelden zum Antworten