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

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 !

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.