Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Registry - Datei Wrapper? (https://www.delphipraxis.net/149411-registry-datei-wrapper.html)

anse 20. Mär 2010 20:18


Registry - Datei Wrapper?
 
Für eine portable Version meiner Anwendung würde ich gern auf NSIS und co. verzichten, die die Registry Einträge vorm Starten aus einer Datei importieren und nach Beenden wieder in die Datei exportieren.

Ich dachte da an eine Wrapper Klasse die die Einstellungen wahlweise in die Registry oder in eine ini-Datei schreibt. Das würde den Änderungs-Aufwand relativ klein halten. Die Baumstruktur in der Registry ist aber nur schwer in einer ini-Datei abzubilden. Noch andere Ideen, anyone?

daywalker9 20. Mär 2010 20:27

Re: Registry - Datei Wrapper?
 
Vielleicht hilft dir ja die Klasse TRegistryIniFile aus Registry.pas weiter.

anse 20. Mär 2010 20:29

Re: Registry - Datei Wrapper?
 
An die hatte ich auch zuerst gedacht, aber wenn ich das richtig verstehe kümmert die sich nur darum dass auf alten Windows Versionen ohne Registry eben alles in eine INI geschrieben wird. Alle Nachfolger von Win 3.1 schreiben damit automatisch und immer in die Registry. (oder?)

daywalker9 20. Mär 2010 20:38

Re: Registry - Datei Wrapper?
 
Nein, siehe Hilfe:

Zitat:

TRegistryIniFile stellt eine sehr einfach zu handhabende Schnittstelle zur Registrierdatenbank dar. Sie benötigen keine Kenntnisse über die eigentliche Struktur der Registrierung. TRegistryIniFile ermöglicht die Verwaltung der Registrierdatenbank von Windows in einer Form, als ob es sich um eine INI-Datei von Windows 3.x handelte. Anstatt jedoch eine INI-Datei zu verarbeiten, greift TRegistryIniFile auf die Registrierung zu. Da TRegistryIniFile, wie TIniFile, von TCustomIniFile abgeleitet ist, eignet es sich für Programmcode, der sowohl in INI-Dateien als auch in die Registrierung schreibt.
Mit TRegistryIniFile kann mit einer minimalen Codeänderung von INI-Dateien auf die Systemregistrierung umgestellt werden. Als Programmierer müssen Sie nichts weiter tun, als im Quelltext alle Referenzen auf TIniFile in Referenzen auf TRegistryIniFile umzuwandeln. Anschließend kompilieren Sie erneut. Ihre Anwendung greift nun nicht mehr auf INI-Dateien, sondern auf die Registrierdatenbank zu. Änderungen in der logischen Programmstruktur sind nicht notwendig.

cookie22 20. Mär 2010 20:41

Re: Registry - Datei Wrapper?
 
schreibs halt in eine xml datei. ;)

da gibs sogar komponenten, die man genauso benutzen kann wie TRegistry.

anse 20. Mär 2010 20:44

Re: Registry - Datei Wrapper?
 
Oh, danke - 2 gute Tips. Über der INI file Idee liegt nur der böse 64K Schatten...

cookie22, welche Komponenten sind das genau?

sx2008 20. Mär 2010 21:23

Re: Registry - Datei Wrapper?
 
Die Funktionen RegSaveKey und RegLoadKey bzw. RegLoadAppKey könnten interessant sein.
Die Registry ist sowieso auf mehrere Dateien (Registry-Hives) verteilt.
Wenn ich das richtig verstehe, könnte man damit weitere Dateien zur Registry hinzubringen.

anse 20. Mär 2010 21:45

Re: Registry - Datei Wrapper?
 
Zitat:

Zitat von sx2008
Wenn ich das richtig verstehe, könnte man damit weitere Dateien zur Registry hinzubringen.

Ja, RegLoadAppKey hört sich in der Tat so an, ist allerdings auch erst ab Vista verfügbar. Die beiden anderen Funktionen exportieren bzw. importieren einen ganzen Key mitsamt der Unterschlüssel. Das scheint mir auch die einfachste Lösung für meine portable zu sein: Beim Start importieren und beim Beenden exportieren.

Luckie 20. Mär 2010 22:05

Re: Registry - Datei Wrapper?
 
Zitat:

The calling process must have the SE_BACKUP_NAME privilege enabled. For more information, see Running with Special Privileges.
Das könnte problematisch werden.

anse 20. Mär 2010 22:11

Re: Registry - Datei Wrapper?
 
Jo, dafür muss man sich das Privileg "holen", siehe http://www.delphipraxis.net/internal...t.php?p=131879 - was aber auf meinem Vista schon mal nicht funktioniert - "Dem Client fehlt ein erforderliches Recht". Es ist wie verhext... exportiere ich den Key jetzt selbst manuell in eine Datei, also nicht mit RegSaveKey sondern den String zusammenbauen und in ein TextFile schreiben?

Luckie 20. Mär 2010 23:18

Re: Registry - Datei Wrapper?
 
Und genau das "holen" geht nicht. Entweder der Benutzer hat das Privileg oder nicht. Hat er es, kann man das Privileg aktivieren.

Ich verstehe dein Problem eigentlich nicht. Gib dem Benutzer doch die Möglichkeit zu wählen, wo die Einstellungen gespeichert werden sollen. Entweder in der Registry oder im Anwendungsverzeichnis mit Hilfe einer Ini-Datei.

jaenicke 21. Mär 2010 02:22

Re: Registry - Datei Wrapper?
 
Ich habe da auch noch was im Angebot, das die Einstellungen automatisch verwaltet. ;-)
http://www.delphipraxis.net/internal....php?p=1042717
Es werden XML-Dateien genauso unterstützt wie die Registry oder eigene Streams, sowie die verschiedenen Orte für alle oder den aktuellen Nutzer usw.

anse 21. Mär 2010 07:25

Re: Registry - Datei Wrapper?
 
jaenicke, wie hoch ist denn da der Anpassungs-Aufwand ? Geht immerhin um eine bestehende Anwendung mit ca. 100 Einstellungs "Items".

jaenicke 21. Mär 2010 09:00

Re: Registry - Datei Wrapper?
 
Kommt drauf an, wenn du bereits ein Einstellungsobjekt verwendest, in dem die Einstellungen verwaltet werden, dann kannst du dieses einfach durch das neue ersetzen. Dort kannst du die Eigenschaften usw. dann einfach hinkopieren, das einzige was dann noch fehlt ist (wenn du das nutzen willst) die Anpassung des Einstellungswizards, das Setzen von Standardeinstellungen, wenn du das willst und natürlich die Speicherung der Einstellungen selbst.

Wobei das Integrationstool vieles bei Standarddatentypen alleine machen kann. Die Eigenschaften gibt man einfach in dem Tool ein. Nimm dir einfach ein neues Projekt und lass darauf das Integrationstool los. Dann kannst du das in wenigen Minuten einfach mal testen. ;-)

// EDIT:
Ich habe mal ein kleines Demovideo gemacht zur besseren Illustration: ;-)
http://www.sjberlin.de/service/video...utils_demo.wmv
Und für den IE als Webseite: http://www.sjberlin.de/service/video...tils_demo.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz