En tant que développeur, les outils qui stockent la configuration / les options dans le registre sont le fléau de ma vie. Je ne peux pas facilement suivre les modifications apportées à ces options, je ne peux pas les porter facilement d'une machine à l'autre, et tout cela me fait vraiment aspirer au bon vieux temps des fichiers .INI ...
Lors de l'écriture de mes propres applications, que dois-je - le cas échéant - choisir de placer dans le registre plutôt que dans des fichiers de configuration à l'ancienne, et pourquoi?
Réponses:
la source
$HOME/.config/your-app/
, une solution créée pour résoudre le problème des objets @grep. Et, surprise, Linux moderne (et quiconque sur le * BSD est assez fou pour utiliser GNOME) a également un registre dans lagconf
suite. Choix de races de logiciels libres, c'est sûr;)Pour en venir à la fois du point de vue de l'utilisateur et du point de vue des programmeurs, je dois dire qu'il n'y a vraiment pas de bonne excuse pour mettre quelque chose dans le registre à moins que ce ne soit quelque chose comme des associations de fichiers ou des paramètres spécifiques à la machine.
Je viens de l'école de pensée qui dit qu'un programme doit être exécutable de partout où il est installé, que l'installation doit être complètement déplaçable dans une machine, voire sur une autre machine et ne pas affecter son fonctionnement.
Toutes les options configurables, ou les DLL requises, etc., si elles ne sont pas partagées, doivent résider dans un sous-répertoire du répertoire d'installation, afin que toute l'installation soit facilement déplacée.
J'utilise beaucoup d'utilitaires plus petits comme des programmes, donc s'il ne peut pas être installé sur une clé USB et branché sur une autre machine et simplement fonctionner, alors ce n'est pas pour moi.
la source
Politique Microsoft:
Le registre dépend de la machine. Je ne l'ai jamais aimé car il ralentit et il est presque impossible de trouver ce dont vous avez besoin. C'est pourquoi j'aime les fichiers ini simples ou autres. Vous savez où ils se trouvent (dossier d'application ou dossier utilisateur) afin qu'ils soient facilement portables et lisibles par l'homme.
la source
Quand - Vous êtes obligé de le faire en raison de l'intégration héritée ou parce que l'administrateur système de votre client dit "il en sera ainsi" ou parce que vous développez dans un langage plus ancien qui rend l'utilisation de XML plus difficile.
Pourquoi - Principalement parce que le registre n'est pas aussi portable que la copie d'un fichier de configuration qui se trouve à côté de l'application (et s'appelle presque la même chose).
Si vous utilisez .Net2 +, vous avez des fichiers App.Config et User.Config et vous n'avez pas besoin d'enregistrer les DLL dans le registre, alors évitez-les.
Les fichiers de configuration ont leurs propres problèmes (voir ci-dessous), mais ceux-ci peuvent être codés et vous pouvez modifier votre architecture.
la source
Le monde va-t-il se terminer si vous stockez quelques positions de fenêtre et une liste des éléments les plus récemment utilisés dans le registre Windows? Cela a bien fonctionné pour moi jusqu'à présent.
HKEY-CURRENT-USER est un excellent endroit pour stocker des données utilisateur triviales en petites quantités. C'est pour ça que c'est. Il semble idiot de ne pas l'utiliser aux fins prévues simplement parce que d'autres en ont abusé.
la source
Les paramètres que vous souhaitez voir disponibles dans le profil itinérant d'un utilisateur devraient probablement aller dans le registre, à moins que vous ne souhaitiez réellement chercher à rechercher manuellement le dossier Application Data de l'utilisateur. :-)
la source
Les lectures et écritures du registre sont sûres pour les threads, mais les fichiers ne le sont pas. Cela dépend donc du fait que votre programme soit ou non à thread unique.
la source
Si vous développez une nouvelle application et que vous vous souciez de la portabilité, vous ne devriez JAMAIS stocker de données dans le registre Windows car les autres systèmes d'exploitation n'ont pas de registre (Windows) (note duh - cela peut être évident mais est souvent négligé).
Si vous ne développez que pour les plates-formes Win ... essayez de l'éviter autant que possible. Les fichiers de configuration (éventuellement cryptés) sont une solution bien meilleure. Il n'y a aucun gain à stocker des données dans le registre - (le stockage isolé est une bien meilleure solution, par exemple si vous utilisez .NET).
la source
Un peu hors sujet, mais comme je vois des gens préoccupés par la portabilité, la meilleure approche que j'ai jamais utilisée est la classe QSettings de Qt. Il fait abstraction du stockage des paramètres (registre sous Windows, fichier de préférences XML sous Mac OS et fichiers Ini sous Unix). En tant que client de la classe, je n'ai pas à passer un cycle cérébral à m'interroger sur le registre ou quoi que ce soit d'autre, ça marche juste (tm).
http://doc.trolltech.com/4.4/qsettings.html#details
la source
Habituellement, si vous ne mettez pas de paramètres dans le registre, vous l'utilisez principalement pour obtenir les paramètres Windows actuels, modifier les associations de fichiers, etc.
Maintenant, si vous devez détecter si votre logiciel est déjà installé, vous pouvez faire une entrée minimale dans le registre , c'est un emplacement que vous pouvez retrouver dans n'importe quelle configuration. Ou recherchez un dossier du nom donné dans Application Data.
Si je regarde mon dossier Document and Settings, je vois beaucoup de logiciels utilisant la notation par points Unix pour définir les dossiers: .p4qt .sqlworkbench .squirrel-sql .SunDownloadManager .xngr .antexplorer .assistant .CodeBlocks .dbvis .gimp-2.4 .jdictionary .jindent .jogl_ext (etc.)
et dans Application Data, divers dossiers avec des noms d'éditeurs ou des noms de logiciels. On dirait que c'est la tendance actuelle, au moins parmi les applications portables ...
WinMerge utilise une approche légèrement différente, stockant les données dans le registre, mais offrant des options d'importation et d'exportation dans la boîte de dialogue de configuration.
la source
Personnellement, j'ai utilisé le registre pour stocker les chemins d'installation à utiliser par les scripts de (dés) installation. Je ne sais pas si c'est la seule option possible, mais cela me semblait être une solution sensée. C'était pour une application qui était uniquement utilisée sous Windows, bien sûr.
la source
Dans .NET, il n'y a jamais vraiment de besoin.
Voici 2 exemples qui montrent comment utiliser les propriétés de projet pour ce faire.
Ces exemples le font par Propriétés du projet utilisateur Windows, mais la même chose pourrait / peut être effectuée par Application.
Plus ici:
http://code.msdn.microsoft.com/TheNotifyIconExample
http://code.msdn.microsoft.com/SEHE
la source
(en retard à la discussion mais) Réponse courte: Stratégie de groupe.
Si le service informatique de votre client souhaite appliquer des paramètres liés à Windows ou au (x) composant (s) que vous écrivez ou regroupez, comme une vitesse de liaison, un message d'erreur personnalisé ou un serveur de base de données auquel se connecter, cela reste généralement fait via la stratégie de groupe, qui en fait sa manifestation ultime sous forme de paramètres stockés dans le registre. Ces politiques sont appliquées à partir du moment où Windows démarre ou que l'utilisateur se connecte.
Il existe des outils pour créer des modèles ADMX personnalisés qui peuvent mapper les paramètres de vos composants aux emplacements de registre, et donner à l'administrateur une interface commune pour appliquer les stratégies qu'il doit appliquer tout en leur montrant uniquement les paramètres qui sont significatifs pour appliquer de cette manière.
la source
Je pense que le registre Windows était une bonne idée, mais à cause des grands abus de la part des développeurs d'applications et des politiques standard non encouragées / mandatées par Microsoft, il est devenu une bête ingérable. Je déteste l'utiliser pour les raisons que vous avez mentionnées, il y a cependant des occasions où cela a du sens de l'utiliser:
la source