Als Entwickler sind Tools, die Konfiguration / Optionen in der Registrierung speichern, der Fluch meines Lebens. Ich kann Änderungen an diesen Optionen nicht einfach nachverfolgen, sie nicht einfach von Maschine zu Maschine portieren, und all das lässt mich wirklich nach den guten alten Zeiten von INI-Dateien sehnen ...
Was sollte ich beim Schreiben meiner eigenen Anwendungen - wenn überhaupt - in die Registrierung einfügen und nicht in altmodische Konfigurationsdateien, und warum?
Antworten:
quelle
$HOME/.config/your-app/
, eine Lösung, die erstellt wurde, um das Problem zu lösen, bei dem @grep-Objekte auftreten. Und überraschenderweise hat modernes Linux (und jeder auf dem * BSD, der verrückt genug ist, um GNOME zu verwenden) auch eine Registrierung in dergconf
Suite. FOSS züchtet Entscheidungen, das ist sicher;)Wenn ich dies sowohl aus Benutzer- als auch aus Programmiererperspektive betrachte, muss ich sagen, dass es wirklich keine gute Ausnahme gibt, etwas in die Registrierung aufzunehmen, es sei denn, es handelt sich um Dateizuordnungen oder maschinenspezifische Einstellungen.
Ich komme aus der Denkschule, die besagt, dass ein Programm von jedem Ort aus ausgeführt werden kann, an dem es installiert ist, dass die Installation vollständig innerhalb einer Maschine oder sogar auf eine andere Maschine verschoben werden kann und die Ausführung nicht beeinträchtigt.
Alle konfigurierbaren Optionen oder erforderlichen DLLs usw., wenn sie nicht gemeinsam genutzt werden, sollten sich in einem Unterverzeichnis des Installationsverzeichnisses befinden, damit die gesamte Installation problemlos verschoben werden kann.
Ich verwende viele kleinere Dienstprogramme wie Programme. Wenn es also nicht auf einem USB-Stick installiert und an einen anderen Computer angeschlossen und einfach ausgeführt werden kann, ist es nichts für mich.
quelle
Microsoft-Richtlinie:
Die Registrierung ist maschinenabhängig. Ich habe es nie gemocht, weil es zu langsam wird und es fast unmöglich ist, das zu finden, was Sie brauchen. Deshalb mag ich einfache INI- oder andere Einstellungsdateien. Sie wissen, wo sie sich befinden (Anwendungsordner oder Benutzerordner), sodass sie leicht zu transportieren und für Menschen lesbar sind.
quelle
Wann - Sie sind aufgrund der Legacy-Integration oder weil der Systemadministrator Ihres Kunden sagt, dass es so sein soll oder weil Sie in einer älteren Sprache entwickeln, die die Verwendung von XML erschwert, dazu gezwungen.
Warum - In erster Linie, weil die Registrierung nicht so portabel ist wie das Kopieren einer Konfigurationsdatei, die sich neben der Anwendung befindet (und fast gleich heißt).
Wenn Sie .Net2 + verwenden, verfügen Sie über App.Config- und User.Config-Dateien und müssen keine DLLs in der Registrierung registrieren. Halten Sie sich daher davon fern.
Konfigurationsdateien haben ihre eigenen Probleme (siehe unten), diese können jedoch codiert werden und Sie können Ihre Architektur ändern.
quelle
Wird die Welt untergehen, wenn Sie einige Fensterpositionen und eine Liste der zuletzt verwendeten Elemente in der Windows-Registrierung speichern? Bisher hat es für mich gut funktioniert.
HKEY-CURRENT-USER ist ein großartiger Ort, um triviale Benutzerdaten in kleinen Mengen zu speichern. Dafür ist es da. Es scheint albern, es nicht für den beabsichtigten Zweck zu verwenden, nur weil andere es missbraucht haben.
quelle
Einstellungen, die im Roaming-Profil eines Benutzers verfügbar sein sollen, sollten wahrscheinlich in der Registrierung gespeichert werden, es sei denn, Sie möchten tatsächlich manuell nach dem Anwendungsdatenordner des Benutzers suchen. :-)
quelle
Lese- und Schreibvorgänge in der Registrierung sind threadsicher, Dateien jedoch nicht. Es hängt also davon ab, ob Ihr Programm Single-Threaded ist oder nicht.
quelle
Wenn Sie eine neue App entwickeln und sich für Portabilität interessieren, sollten Sie dies tun NIEMALS Wert auf Daten in der Windows-Registrierung speichern, da andere Betriebssysteme keine (Windows-) Registrierung haben (Hinweis: Dies kann offensichtlich sein, wird jedoch häufig übersehen).
Wenn Sie nur für Win-Plattformen entwickeln ... versuchen Sie, dies so weit wie möglich zu vermeiden. Konfigurationsdateien (möglicherweise verschlüsselt) sind eine viel bessere Lösung. Das Speichern von Daten in der Registrierung bringt keinen Vorteil - (isolierter Speicher ist eine viel bessere Lösung, wenn Sie beispielsweise .NET verwenden).
quelle
Etwas abseits des Themas, aber da ich Leute sehe, die sich Sorgen um die Portabilität machen, ist der beste Ansatz, den ich je verwendet habe, die QSettings-Klasse von Qt. Es abstrahiert die Speicherung der Einstellungen (Registrierung unter Windows, XML-Voreinstellungsdatei unter Mac OS und Ini-Dateien unter Unix). Als Kunde der Klasse muss ich keinen Gehirnzyklus damit verbringen, mich über die Registrierung oder irgendetwas anderes zu wundern, es funktioniert einfach (tm).
http://doc.trolltech.com/4.4/qsettings.html#details
quelle
Wenn Sie keine Einstellungen in die Registrierung einfügen, verwenden Sie diese normalerweise hauptsächlich, um aktuelle Windows-Einstellungen abzurufen, Dateizuordnungen zu ändern usw.
Wenn Sie jetzt feststellen müssen, ob Ihre Software bereits installiert ist, können Sie einen minimalen Eintrag in der Registrierung vornehmen , das ist ein Ort, den Sie in jeder Konfiguration wiederfinden können. Oder suchen Sie einen Ordner mit einem bestimmten Namen in den Anwendungsdaten.
Wenn ich mir meinen Ordner "Dokument und Einstellungen" ansehe, sehe ich viele Softwareprogramme, die die Unix-Punktnotation zum Festlegen von Ordnern verwenden: .p4qt .sqlworkbench .squirrel-sql .SunDownloadManager .xngr .antexplorer .assistant .CodeBlocks .dbvis .gimp-2.4 .jdictionary .jindent .jogl_ext (etc.)
und in Anwendungsdaten verschiedene Ordner mit Editornamen oder Software-Namen. Zumindest bei tragbaren Anwendungen
scheint dies der aktuelle Trend zu sein ... WinMerge verwendet einen etwas anderen Ansatz: Es speichert Daten in der Registrierung, bietet jedoch den Import und Export von Optionen im Konfigurationsdialog an.
quelle
Persönlich habe ich die Registrierung verwendet, um Installationspfade zur Verwendung durch die (Un-) Installationsskripte zu speichern. Ich bin mir nicht sicher, ob dies die einzig mögliche Option ist, schien aber eine vernünftige Lösung zu sein. Dies war für eine App, die natürlich nur unter Windows verwendet wurde.
quelle
In .NET besteht wirklich KEIN Bedarf.
Hier sind 2 Beispiele, die zeigen, wie Sie dazu Project-Eigenschaften verwenden.
Diese Beispiele tun dies über die Eigenschaften des Windows-Benutzerprojekts, aber das Gleiche könnte / kann auch über die Anwendung geschehen.
Mehr hier:
http://code.msdn.microsoft.com/TheNotifyIconExample
http://code.msdn.microsoft.com/SEHE
quelle
(zu spät zur Diskussion, aber) Kurze Antwort: Gruppenrichtlinien.
Wenn die IT-Abteilung Ihres Kunden Einstellungen in Bezug auf Windows oder die Komponente (n) erzwingen möchte, in die Sie schreiben oder die Sie bündeln, z. B. eine Verbindungsgeschwindigkeit, eine benutzerdefinierte Fehlermeldung oder einen Datenbankserver, zu dem eine Verbindung hergestellt werden soll, ist dies normalerweise immer noch der Fall Dies erfolgt über Gruppenrichtlinien, die sich endgültig als in der Registrierung gespeicherte Einstellungen manifestieren. Solche Richtlinien werden ab dem Start von Windows oder der Anmeldung des Benutzers erzwungen.
Es gibt Tools zum Erstellen benutzerdefinierter ADMX-Vorlagen, mit denen die Einstellungen Ihrer Komponenten Registrierungsspeicherorten zugeordnet werden können, und die dem Administrator eine gemeinsame Schnittstelle zum Durchsetzen von Richtlinien bieten, die er erzwingen muss, während nur die Einstellungen angezeigt werden, die für die Durchsetzung auf diese Weise von Bedeutung sind.
quelle
Ich glaube, dass die Windows-Registrierung eine gute Idee war, aber aufgrund des großen Missbrauchs durch Anwendungsentwickler und der von Microsoft nicht ermutigten / vorgeschriebenen Standardrichtlinien wurde dies zu einem unüberschaubaren Biest. Ich hasse es aus den von Ihnen genannten Gründen, es zu verwenden. Es gibt jedoch einige Fälle, in denen es sinnvoll ist, es zu verwenden:
quelle