Comment accéder au registre Windows en utilisant C #

Microsoft .Net vous permet d'accéder au registre Windows par programme pour stocker et récupérer des données. Le registre Windows est une base de données hiérarchique qui comprend une collection de clés, de sous-clés, de clés prédéfinies, de ruches et d'entrées de valeur et peut être utilisée pour stocker des données spécifiques au système ou à une application. Le MSDN déclare: "Le registre agit comme un référentiel central d'informations pour le système d'exploitation et les applications sur un ordinateur."

Vous pouvez profiter du registre Windows pour stocker les métadonnées de configuration de vos applications afin de pouvoir les récupérer ultérieurement si nécessaire.

Le registre Windows stocke les types d'informations suivants de manière hiérarchique.

  1. Informations sur le profil utilisateur
  2. Informations matérielles de votre système
  3. Paramètres de propriété
  4. Informations sur les programmes installés dans votre système

Notez que vous devez être très prudent lors de la manipulation du registre Windows. Il est conseillé de sauvegarder votre registre avant d'apporter des modifications afin de pouvoir annuler ces modifications si nécessaire. Vous pouvez créer une sauvegarde de votre registre Windows en suivant ces étapes.

  1. Dans Démarrer, sélectionnez Exécuter
  2. Tapez Regedit et appuyez sur Entrée pour appeler l'éditeur de registre Windows
  3. Maintenant, cliquez sur Fichier -> Exporter
  4. Dans la boîte de dialogue "Enregistrer sous", spécifiez un nom
  5. Sélectionnez une branche particulière ou l'option «Tous» pour exporter l'intégralité des informations du registre
  6. Cliquez sur Enregistrer

Vos informations de registre seront enregistrées dans un fichier .reg portant le nom que vous avez spécifié. Vous êtes maintenant sûr de manipuler votre base de données de registre par programme.

Utilisation du registre Windows en C #

Vous pouvez lire, écrire et supprimer par programme des clés, des sous-clés et des valeurs du registre Windows. Vous pouvez considérer que les clés de registre sont des dossiers dans votre système Windows. Notez qu'une clé peut avoir des sous-clés - de la même manière qu'un dossier peut contenir des sous-dossiers à l'intérieur. Pour travailler avec le registre Windows à l'aide de C #, vous pouvez tirer parti de la classe Registry dans l'espace de noms Microsoft.Win32.

Voyons maintenant un peu de code. Dans cette section, nous allons explorer comment nous pouvons créer, lire ou supprimer des sous-clés du registre Windows en utilisant C #.

Pour créer une nouvelle sous-clé, vous pouvez tirer parti de la méthode CreateSubKey comme indiqué ci-dessous.

Registry.CurrentUser.CreateSubKey(@"SOFTWARE\");

La méthode CreateSubKey crée une nouvelle sous-clé et la renvoie - le type de retour est RegistryKey. L'extrait de code suivant montre comment créer une nouvelle sous-clé nommée et y stocker des valeurs-clés.

using (RegistryKey key = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\"))

           {

               key.SetValue("Key 1", "Value 1");

               key.SetValue("Key 2", "Value 2");              

               key.Close();

           }  

La méthode suivante peut être utilisée pour lire une valeur à partir d'une sous-clé.

static string ReadSubKeyValue(string subKey, string key)

       {

           string str = string.Empty;

           using (RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(subKey))

           {

               if (registryKey != null)

               {

                   str = registryKey.GetValue(key).ToString();

                   registryKey.Close();

               }

           }

           return str;

       }

La méthode ReadSubKeyValue accepte une sous-clé et une clé en tant que paramètre et en renvoie la valeur. Voici comment vous pouvez appeler la méthode ReadSubKeyValue.

static void Main(string[] args)

       {

           string subKey = @"SOFTWARE\";

           string str = ReadSubKeyValue(subKey, "Key 1");

           Console.WriteLine(str);

           Console.Read();

       }

Vous pouvez également supprimer une sous-clé à l'aide de la méthode statique DeleteSubKey. La liste de codes suivante illustre comment procéder.

static bool DeleteKey(string KeyName)

       {

           try

           {

               Registry.CurrentUser.DeleteSubKey(KeyName);

               return true;

           }

           catch

           {

               return false;

           }

       }

La méthode ci-dessus renvoie true si la suppression de la sous-clé est un succès, false dans le cas contraire. Vous voudrez peut-être vérifier si la sous-clé existe avant d'essayer de la supprimer - de cette façon, les modifications des exceptions levées sont minimes. Je vous laisse le soin de modifier le code ci-dessus pour incorporer ce changement.

Vous pouvez également récupérer toutes les sous-clés d'une clé particulière à l'aide de la méthode GetSubKeyNames de la classe RegistryKey. L'extrait de code suivant illustre comment cela peut être réalisé.

static List GetChildSubKeys(string key)

       {

           List lstSubKeys = new List();

           try

          {

               using (RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(key))

               {

                   if (!(registryKey == null))

                   {

                       string[] temp = registryKey.GetSubKeyNames();

                       foreach (string str in temp)

                       {

                           lstSubKeys.Add(str);

                       }

                   }

               }

           }

           catch

           {

               //Write your custom exception handling code here

           }

           return lstSubKeys;

       }

Pour utiliser la méthode GetChildSubKeys et récupérer toutes les sous-clés d'une clé particulière, vous pouvez écrire le code suivant.

List lstSubKeys = GetChildSubKeys(subKey);