Så här får du tillgång till Windows-registret med C #

Med Microsoft .Net kan du komma åt Windows-registret programmatiskt för att lagra och hämta data. Windows-registret är en hierarkisk databas som består av en samling nycklar, undernycklar, fördefinierade nycklar, nässelfeber och värdeposter och kan användas för att lagra systemspecifika eller applikationsspecifika data. MSDN säger: "Registret fungerar som ett centralt arkiv med information för operativsystemet och applikationerna på en dator."

Du kan dra nytta av Windows-registret för att lagra konfigurationsmetadata för dina applikationer så att du kan hämta dem vid en senare tidpunkt om det behövs.

Windows-registret lagrar följande typer av information på ett hierarkiskt sätt.

  1. Användarprofilinformation
  2. Hårdvaruinformation för ditt system
  3. Fastighetsinställningar
  4. Information om installerade program i ditt system

Observera att du bör vara extra försiktig när du manipulerar Windows-registret. Det är tillrådligt att säkerhetskopiera ditt register innan du gör några ändringar så att du kan återställa dessa ändringar om det behövs. Du kan skapa en säkerhetskopia av ditt Windows-register genom att följa dessa steg.

  1. Välj Start från Start
  2. Skriv Regedit och tryck på Enter för att åberopa Windows Registerredigerare
  3. Klicka nu på Arkiv -> Exportera
  4. I dialogrutan "Spara som" anger du ett namn
  5. Välj en viss gren eller alternativet "Alla" för att exportera hela registerinformationen
  6. Klicka på Spara

Din registerinformation sparas i en .reg-fil med namnet du angav. Du är nu säker att manipulera din registerdatabas programmatiskt.

Arbeta med Windows-registret i C #

Du kan programmatiskt läsa, skriva och radera nycklar, undernycklar och värden från Windows-registret. Du kan överväga att registernycklar är mappar i ditt Windows-system. Observera att en nyckel kan ha undernycklar - ungefär på samma sätt som en mapp kan innehålla undermappar inuti den. För att arbeta med Windows-registret med C # kan du dra nytta av registerklassen i namnet Microsoft.Win32.

Låt oss nu gräva i lite kod. I det här avsnittet kommer vi att undersöka hur vi kan skapa, läsa eller ta bort undernycklar från Windows-registret med C #.

För att skapa en ny undernyckel kan du dra nytta av metoden CreateSubKey som visas nedan.

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

Metoden CreateSubKey skapar en ny undernyckel och returnerar den - returtypen är RegistryKey. Följande kodavsnitt visar hur du kan skapa en ny undernyckel med namnet och lagra nyckel - värden i den.

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

           {

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

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

               key.Close();

           }  

Följande metod kan användas för att läsa ett värde från en undernyckel.

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;

       }

ReadSubKeyValue-metoden accepterar en undernyckel och en nyckel som parameter och returnerar värdet ur den. Så här kan du ringa metoden ReadSubKeyValue.

static void Main(string[] args)

       {

           string subKey = @"SOFTWARE\";

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

           Console.WriteLine(str);

           Console.Read();

       }

Du kan också ta bort en undernyckel med den statiska metoden DeleteSubKey. Följande kodlista illustrerar hur du kan göra detta.

static bool DeleteKey(string KeyName)

       {

           try

           {

               Registry.CurrentUser.DeleteSubKey(KeyName);

               return true;

           }

           catch

           {

               return false;

           }

       }

Ovanstående metod returnerar true om radering av undernyckeln är en framgång, annars är det falskt. Du kanske vill kontrollera om undernyckeln finns innan du försöker ta bort den - på det sättet är ändringarna av undantag som kastas minimala. Jag överlåter det till dig att ändra ovanstående kod för att införliva denna ändring.

Du kan också hämta alla undernycklar för en viss nyckel med GetSubKeyNames-metoden i klassen RegistryKey. Följande kodavsnitt illustrerar hur detta kan uppnås.

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;

       }

För att använda GetChildSubKeys-metoden och hämta alla undernycklar för en viss nyckel kan du skriva följande kod.

List lstSubKeys = GetChildSubKeys(subKey);