So greifen Sie mit C # auf die Windows-Registrierung zu

Mit Microsoft .Net können Sie programmgesteuert auf die Windows-Registrierung zugreifen, um Daten zu speichern und abzurufen. Die Windows-Registrierung ist eine hierarchische Datenbank, die aus einer Sammlung von Schlüsseln, Unterschlüsseln, vordefinierten Schlüsseln, Hives und Werteinträgen besteht und zum Speichern systemspezifischer oder anwendungsspezifischer Daten verwendet werden kann. In der MSDN heißt es: "Die Registrierung fungiert als zentrales Informationsspeicher für das Betriebssystem und die Anwendungen auf einem Computer."

Sie können die Windows-Registrierung nutzen, um Konfigurationsmetadaten Ihrer Anwendungen zu speichern, damit Sie sie bei Bedarf zu einem späteren Zeitpunkt abrufen können.

In der Windows-Registrierung werden die folgenden Arten von Informationen hierarchisch gespeichert.

  1. Benutzerprofilinformationen
  2. Hardwareinformationen Ihres Systems
  3. Eigenschafteneinstellungen
  4. Informationen zu installierten Programmen in Ihrem System

Beachten Sie, dass Sie beim Bearbeiten der Windows-Registrierung besonders vorsichtig sein sollten. Es ist ratsam, Ihre Registrierung zu sichern, bevor Sie Änderungen vornehmen, damit Sie diese Änderungen bei Bedarf zurücksetzen können. Sie können eine Sicherung Ihrer Windows-Registrierung erstellen, indem Sie die folgenden Schritte ausführen.

  1. Wählen Sie unter Start die Option Ausführen
  2. Geben Sie Regedit ein und drücken Sie die Eingabetaste, um den Windows-Registrierungseditor aufzurufen
  3. Klicken Sie nun auf Datei -> Exportieren
  4. Geben Sie im Dialogfeld "Speichern unter" einen Namen an
  5. Wählen Sie einen bestimmten Zweig oder die Option "Alle" aus, um die gesamten Registrierungsinformationen zu exportieren
  6. Klicken Sie auf Speichern

Ihre Registrierungsinformationen werden in einer REG-Datei mit dem von Ihnen angegebenen Namen gespeichert. Sie können Ihre Registrierungsdatenbank jetzt sicher programmgesteuert bearbeiten.

Arbeiten mit der Windows-Registrierung in C #

Sie können Schlüssel, Unterschlüssel und Werte programmgesteuert in der Windows-Registrierung lesen, schreiben und löschen. Sie können Registrierungsschlüssel als Ordner in Ihrem Windows-System betrachten. Beachten Sie, dass ein Schlüssel Unterschlüssel enthalten kann - ähnlich wie ein Ordner Unterordner enthalten kann. Um mit der Windows-Registrierung unter Verwendung von C # zu arbeiten, können Sie die Registrierungsklasse im Microsoft.Win32-Namespace verwenden.

Lassen Sie uns nun einen Code untersuchen. In diesem Abschnitt erfahren Sie, wie Sie mit C # Unterschlüssel aus der Windows-Registrierung erstellen, lesen oder löschen können.

Um einen neuen Unterschlüssel zu erstellen, können Sie die unten gezeigte CreateSubKey-Methode nutzen.

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

Die CreateSubKey-Methode erstellt einen neuen Unterschlüssel und gibt ihn zurück. Der Rückgabetyp ist RegistryKey. Das folgende Codefragment zeigt, wie Sie einen neuen Unterschlüssel mit dem Namen erstellen und Schlüsselwerte darin speichern können.

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

           {

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

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

               key.Close();

           }  

Die folgende Methode kann verwendet werden, um einen Wert aus einem Unterschlüssel zu lesen.

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;

       }

Die ReadSubKeyValue-Methode akzeptiert einen Unterschlüssel und einen Schlüssel als Parameter und gibt den Wert daraus zurück. So können Sie die ReadSubKeyValue-Methode aufrufen.

static void Main(string[] args)

       {

           string subKey = @"SOFTWARE\";

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

           Console.WriteLine(str);

           Console.Read();

       }

Sie können einen Unterschlüssel auch mit der statischen Methode DeleteSubKey löschen. Die folgende Codeliste zeigt, wie Sie dies tun können.

static bool DeleteKey(string KeyName)

       {

           try

           {

               Registry.CurrentUser.DeleteSubKey(KeyName);

               return true;

           }

           catch

           {

               return false;

           }

       }

Die obige Methode gibt true zurück, wenn das Löschen des Unterschlüssels erfolgreich ist, andernfalls false. Möglicherweise möchten Sie überprüfen, ob der Unterschlüssel vorhanden ist, bevor Sie versuchen, ihn zu löschen. Auf diese Weise sind die Änderungen der ausgelösten Ausnahmen minimal. Ich überlasse es Ihnen, den obigen Code zu ändern, um diese Änderung aufzunehmen.

Sie können auch alle Unterschlüssel eines bestimmten Schlüssels mit der GetSubKeyNames-Methode der RegistryKey-Klasse abrufen. Das folgende Codefragment zeigt, wie dies erreicht werden kann.

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;

       }

Um die GetChildSubKeys-Methode zu verwenden und alle Unterschlüssel eines bestimmten Schlüssels abzurufen, können Sie den folgenden Code schreiben.

List lstSubKeys = GetChildSubKeys(subKey);