Quand et pourquoi devriez-vous stocker des données dans le Registre de Windows?
En tant que développeur, les outils qui stockent des informations de configuration/options dans la base de registre sont le fléau de ma vie. Je ne peut pas facilement suivre les modifications apportées à ces options, ne peut pas facilement le port de la machine à la machine, et ça me fait vraiment de la nostalgie pour le bon vieux temps de .Les fichiers INI...
Lors de l'écriture de mes propres applications, ce qui - si quoi que ce soit - dois-je choisir de mettre dans le registre plutôt que dans l'ancienne fichiers de configuration, et pourquoi?
- Je travaille avec une application héritée maintenant qui stocke des informations dans la base de registre (.NET app), et il me pousse à la noix.
Vous devez vous connecter pour publier un commentaire.
$HOME/.config/your-app/
, une solution pour traiter le problème @grep objets. Et, surprise, moderne Linux (et n'importe qui sur les *BSD assez fou pour utiliser GNOME) aussi est un registre dans legconf
suite. Les logiciels libres races choix, c'est sûr 😉Venir à ce à partir d'un point de vue des utilisateurs et des programmeurs point de vue, je dirais il n'y a vraiment pas une bonne exceuse de mettre quelque chose dans le registre, sauf si c'est quelque chose comme les associations de fichiers, ou à la machine, les paramètres spécifiques.
Je viens de l'école de pensée qui dit que, un programme exécutable à partir de l'endroit où il est installé, que l'installation doit être complètement mobile à l'intérieur d'une machine, ou même sur une autre machine et de ne pas affecter le fonctionnement de celui-ci.
Toutes les options configurables, ou que la dll, etc, si elles ne sont pas partagées doivent résider dans un sous-répertoire du répertoire d'installation, de sorte que l'ensemble de l'installation est facilement déplacé.
J'utilise beaucoup d'électricité réduite de programmes de ce genre, donc si il ne peut pas être installé sur une clé usb et branché sur une autre machine et il suffit d'exécuter, alors ce n'est pas pour moi.
Stratégie de Microsoft:
Le registre dépend de la machine. Je n'ai jamais aimé parce que sa arriver à ralentir et il est presque imposible de trouver la chose dont vous avez besoin. C'est pourquoi j'aime simple ini ou d'autres fichiers de paramètres. Vous savez où ils sont (dossier de l'application ou d'un dossier utilisateur), de sorte qu'ils sont faciles portable, et lisible par l'homme.
System.Configuration
espace de noms de ces jours, qui est basé sur XML.Quand - Vous êtes forcé à cause de l'héritage de l'intégration ou parce que votre client sysadmin dit "il doit être" ou parce que vous êtes en développement dans un ancien langage qui rend plus difficile l'utilisation de XML.
Pourquoi - Principalement parce que le registre n'est pas aussi portable que de la copie d'un fichier de configuration qui est assis à côté de la demande (et est appelée à peu près la même).
Si vous êtes en utilisant .Net2+ vous avez de l'Application.Config et de l'Utilisateur.Les fichiers de configuration et vous n'avez pas besoin d'enregistrer la DLL dans le registre afin de rester loin de lui.
Fichiers de configuration ont leurs propres problèmes (voir ci-dessous), mais ceux-ci peuvent être codés en autour de vous et vous pouvez modifier votre architecture.
Va le monde à la fin si vous stockez quelques positions de la fenêtre et une liste de la plupart des éléments récemment utilisés dans le registre de Windows? Il a travaillé très bien pour moi jusqu'à présent.
HKEY-CURRENT-USER est un endroit idéal pour stocker trivial données de l'utilisateur en petites quantités. C'est ce qu'il est. Il semble idiot de ne pas l'utiliser pour son usage prévu, juste parce que d'autres ont abusé d'elle.
Les paramètres que vous souhaitez avoir à disposition dans un profil itinérant devrait probablement aller dans le registre, sauf si vous voulez vraiment aller à l'effort de recherche pour l'Application de l'utilisateur des Données de dossier en main. 🙂
Registre des lectures et écritures sont thread-safe, mais les fichiers ne le sont pas. Donc, cela dépend de si oui ou non votre programme est mono-thread.
Si vous développez un nouveau programme et vous vous souciez de la portabilité, vous devriez JAMAIS stocker des données dans le registre de windows depuis les autres OS n'ont pas (windows) registre (duh remarque - ce qui peut être évident, mais il obtient souvent négligé).
Si vous êtes seulement de développer pour Gagner des plates-formes ... essayer de l'éviter autant que possible. Les fichiers de configuration (éventuellement crypté) sont une manière de trouver la meilleure solution. Il n'y a pas de gain de stockage des données dans la base de registre - (stockage isolé est une bien meilleure solution, par exemple, si vous êtes en utilisant .NET).
Légèrement hors-sujet, mais depuis que je vois des personnes concernées au sujet de la portabilité, la meilleure approche que j'ai jamais utilisé Qt est la classe QSettings. Il fait abstraction du stockage des réglages de la base de registre sur Windows, XML fichier de préférences sur Mac OS et fichiers Ini sur Unix). En tant que client de la classe, je n'ai pas à dépenser un cerveau cycle demandais à propos de la base de registre ou autre chose, ça marche (tm).
http://doc.trolltech.com/4.4/qsettings.html#details
Habituellement, si vous ne mettez pas les paramètres dans la base de registre, vous l'utilisez principalement pour suivre l'évolution des paramètres de Windows, modifier les associations de fichiers, etc.
Maintenant, si vous avez besoin de détecter si votre logiciel est déjà installé, vous pouvez faire un minimum d'entrée dans la base de registre, c'est un endroit où vous pourrez les trouver dans une config. Ou de recherche d'un dossier du nom donné dans les Données de l'Application.
Si je regarde mon Document et les Paramètres de dossier, je vois beaucoup de logiciels Unix à l'aide de la notation de point pour le réglage des dossiers:
.p4qt
.sqlworkbench
.squirrel-sql
.SunDownloadManager
.xngr
.antexplorer
.assistant
.CodeBlocks
.dbvis
.gimp-2.4
.jdictionary
.jindent
.jogl_ext (etc.)
et dans les Données de l'Application, différents dossiers avec l'éditeur des noms ou des noms des logiciels. Regarde comme étant la tendance actuelle, au moins parmi les applications portables...
WinMerge utilise une approche légèrement différente, le stockage des données dans la base de registre, mais offrant l'Importation et l'Exportation des options dans la boîte de dialogue de configuration.
Personnellement, j'ai utilisé le registre pour stocker les chemins d'installation pour une utilisation par les nations unies (un)installer les scripts. Je ne sais pas si c'est la seule option possible, mais semblait être une solution sensée. C'était pour une application qui a été le seul à l'utiliser sur Windows, bien sûr.
Dans .NET il n'est vraiment PAS toujours une nécessité.
Voici 2 exemples qui montrent comment utiliser le Projet proerties à faire de ce.
Ces exemples ce faire, l'Utilisateur de Windows Propriétés du Projet, mais la même chose pourrait/qui peut être fait par l'Application.
Plus ici:
http://code.msdn.microsoft.com/TheNotifyIconExample
http://code.msdn.microsoft.com/SEHE
(à la fin de la discussion mais) Réponse Courte: la Stratégie de Groupe.
Si votre informatique du client souhaite appliquer des paramètres liés à Windows ou les composant(s) que vous avez écrit ou groupée, comme un lien de vitesse, ou un message d'erreur personnalisé, ou un serveur de base de données pour se connecter, ce n'est encore fait généralement via la Stratégie de Groupe, ce qui rend sa manifestation ultime que les paramètres stockés dans le registre. Ces politiques sont appliquées à partir de l'heure de démarrage de Windows ou de l'utilisateur.
Il existe des outils pour créer des ADMX modèles qui permet de cartographier vos composants à des emplacements du registre, et de donner à l'administrateur d'une interface commune pour faire appliquer les politiques (s)dont il a besoin pour faire respecter tout en leur montrant uniquement les paramètres qui sont pertinents pour appliquer cette façon.
Je crois que le Registre de Windows est une bonne idée, mais en raison de la grande abus de la part de développeurs d'applications standard et de politiques qui ne sont pas encouragée, mandaté par Microsoft a grandi pour devenir ingérable bête. J'ai hate de l'utiliser pour les raisons que vous avez mentionnées, il y a cependant dans certains cas il est logique de l'utiliser: