Registrymanager: pour accéder très simplement à la base de registre windows

Soyez le premier à donner votre avis sur cette source.

Snippet vu 12 483 fois - Téléchargée 27 fois

Contenu du snippet

Une petite classe très pratique qui s'intègre très simplement dans un projet.
Elle permet de charger, modifier et sauvegarder les valeurs d'une clé présente dans la base de registre windows (typiquement pour sauvegarder des préférences utilisateurs comme le dernier répertoire d'enregistrement, ...).

Comme cette classe est basé sur les design pattern Singleton, elle peut être appelée de partout dans le code:

Pour récupérer une valeur (de type string):
RegistryManager.Instance.Parameter["le_nom_de_la_valeur"]

Pour modifier une valeur (de type string toujours):
RegistryManager.Instance.Parameter["le_nom_de_la_valeur"] = "ma_valeur";

Un petit appel à la méthode SaveRegistry() pour finir et votre application stocke ses données proprement dans la base de registre :o)

Source / Exemple :


using System;
using System.Collections.Specialized;
using Microsoft.Win32;

namespace RegistryManagerNS
{
	/// <summary>
	/// RegistryManager Class
	/// 
	/// Load and save all the parameters in the registry
	/// </summary>
	public class RegistryManager
	{
		#region Attributs
		private static RegistryManager _instance = null;
		private RegistryKey regKeyProduct = null;
		private const string PRODUCT_NAME = "Nom de l application";
		private const string MANUFACTURER_NAME = "Nom de l editeur";

		private NameValueCollection _configurationParameters;
		#endregion

		#region Public Properties

		public NameValueCollection Parameters 
		{
			get{ return _configurationParameters; }
		}

		/// <summary>
		/// Design Pattern Singleton
		/// </summary>
		public static RegistryManager Instance 
		{
			get 
			{
				if (_instance == null)
					_instance = new RegistryManager();
				return (_instance);
			}
		}

		#endregion

		#region Construtor
		private RegistryManager() 
		{
			RegistryKey regKeySoftware = Registry.LocalMachine.OpenSubKey("SOFTWARE");
			RegistryKey regKeyManufacturer  = regKeySoftware.OpenSubKey(MANUFACTURER_NAME, true);
			if (regKeyManufacturer == null)
			{
				regKeyManufacturer = regKeySoftware.CreateSubKey(MANUFACTURER_NAME);
			}
			regKeyProduct = regKeyManufacturer.OpenSubKey(PRODUCT_NAME, true);
			if (regKeyProduct == null)
			{
				regKeyProduct = regKeyManufacturer.CreateSubKey(PRODUCT_NAME);
			}
			_configurationParameters = new NameValueCollection();
			LoadRegistry();
		}

		#endregion

		#region Public methods
		public void LoadRegistry() 
		{
			this._configurationParameters.Clear();
			foreach (string valueName in regKeyProduct.GetValueNames()) 
			{
				_configurationParameters.Add(valueName, (string)regKeyProduct.GetValue(valueName));
			}
		}

		public void SaveRegistry()
		{
			foreach (string key in _configurationParameters.Keys) 
			{
				regKeyProduct.SetValue(key, _configurationParameters.Get(key));
			}
		}
		#endregion
	}
}

Conclusion :


Il y a bien sûr plein d'améliorations à apporter mais je la trouve très pratique et perso, je m'en sers tout le temps !

A voir également

Ajouter un commentaire

Commentaires

Khaled_ST
Messages postés
15
Date d'inscription
mercredi 14 février 2007
Statut
Membre
Dernière intervention
28 juin 2007
-
Lors du premier appel à instance , une UnauthorizedAccessException est levée. Ceci est du au fait que SOFTWARE est ouvert en lecture seule par défaut. Il faut changer
RegistryKey regKeySoftware = Registry.LocalMachine.OpenSubKey("SOFTWARE" , true);
Kangoo06
Messages postés
7
Date d'inscription
mardi 5 août 2003
Statut
Membre
Dernière intervention
13 septembre 2004
-
Assure toi que la clé regKeyManufacturer est bien ouverte en mode écriture (2° param booléen du constructeur)
xolytem
Messages postés
1
Date d'inscription
samedi 21 août 2004
Statut
Membre
Dernière intervention
13 septembre 2004
-
Salut!

j'ai un problème avec ton code... lors du premier appel à "Instance" (les clés n'existent pas encore dans la bdr), la fonction "regKeyManufacturer = regKeySoftware.CreateSubKey(MANUFACTURER_NAME);" me retourne une erreur (System.UnauthorizedAccessException) alors que je suis administrateur sur ma machine ! (XP Pro) quelqu'un aurait-il la solution ?
ultima_93
Messages postés
46
Date d'inscription
mercredi 19 mai 2004
Statut
Membre
Dernière intervention
26 juillet 2007
-
jai un pt probleme sur ton code a ce nivo là
public void LoadRegistry()
{
this._configurationParameters.Clear();
foreach (string valueName in regKeyProduct.GetValueNames())
{
_configurationParameters.Add(valueName, (string)regKeyProduct.GetValue(valueName));
}
}

c kan il a fini le foreach
jai ce message "Additional information: Specified cast is not valid."

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.