Kako pristupiti registru sustava Windows pomoću C #

Microsoft .Net omogućuje vam programski pristup Windows registru radi pohrane i preuzimanja podataka. Windowsov registar je hijerarhijska baza podataka koja se sastoji od zbirke ključeva, potključeva, unaprijed definiranih ključeva, košnica i unosa vrijednosti i može se koristiti za pohranu podataka specifičnih za sustav ili aplikacije. MSDN kaže: "Registar djeluje kao središnje spremište informacija za operativni sustav i aplikacije na računalu."

Možete iskoristiti Windows Registry za pohranu konfiguracijskih metapodataka vaših aplikacija kako biste ih kasnije mogli dohvatiti ako je potrebno.

Windows Registar hijerarhijski pohranjuje sljedeće vrste podataka.

  1. Podaci o korisničkom profilu
  2. Informacije o hardveru vašeg sustava
  3. Postavke svojstva
  4. Informacije o instaliranim programima u vašem sustavu

Napominjemo da biste trebali biti posebno oprezni prilikom manipulacije Windowsovim registrom. Preporučljivo je izraditi sigurnosnu kopiju registra prije bilo kakvih promjena kako biste ih po potrebi vratili natrag. Sigurnosnu kopiju registra sustava Windows možete stvoriti slijedeći ove korake.

  1. Iz Start odaberite Run
  2. Upišite Regedit i pritisnite Enter da biste pozvali Windows Registry Editor
  3. Sada kliknite File -> Export
  4. U dijaloškom okviru "Spremi kao" navedite ime
  5. Odaberite određenu granu ili opciju "Sve" za izvoz cjelokupnih podataka registra
  6. Kliknite Spremi

Podaci vašeg registra spremit će se u .reg datoteku s imenom koje ste naveli. Sada ste sigurni da programski manipulirate bazom podataka registra.

Rad s Windowsovim registrom na C #

Možete programski čitati, pisati i brisati ključeve, potključeve i vrijednosti iz registra sustava Windows. Ključeve registra možete smatrati mapama u vašem Windows sustavu. Imajte na umu da ključ može imati potključeve - gotovo na isti način na koji mapa može sadržavati podmape u sebi. Za rad s Windowsovim registrom pomoću C # možete iskoristiti klasu Registry u imenskom prostoru Microsoft.Win32.

Krenimo sada u neki kod. U ovom ćemo odjeljku istražiti kako možemo stvoriti, čitati ili brisati potključeve iz Windows registra pomoću C #.

Da biste stvorili novu potključ, možete iskoristiti metodu CreateSubKey kako je prikazano u nastavku.

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

Metoda CreateSubKey stvara novi podključ i vraća ga - vrsta povrata je RegistryKey. Sljedeći isječak koda pokazuje kako možete stvoriti novi podključ s imenom i u njemu pohraniti vrijednosti ključa.

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

           {

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

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

               key.Close();

           }  

Sljedeća metoda može se koristiti za čitanje vrijednosti iz podključa.

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;

       }

Metoda ReadSubKeyValue prihvaća potključ i ključ kao parametar i vraća vrijednost iz njih. Evo kako možete nazvati metodu ReadSubKeyValue.

static void Main(string[] args)

       {

           string subKey = @"SOFTWARE\";

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

           Console.WriteLine(str);

           Console.Read();

       }

Potključ možete izbrisati i statičkom metodom DeleteSubKey. Sljedeći popis kodova ilustrira kako to možete učiniti.

static bool DeleteKey(string KeyName)

       {

           try

           {

               Registry.CurrentUser.DeleteSubKey(KeyName);

               return true;

           }

           catch

           {

               return false;

           }

       }

Gornja metoda vraća true ako je brisanje podključa uspješno, inače false. Možda ćete htjeti provjeriti postoji li potključ prije nego što ga pokušate izbrisati - na taj su način izmjene izuzetaka minimalne. Ostavljam vama da izmijenite gornji kôd kako biste uvrstili ovu promjenu.

Također možete preuzeti sve podključeve određenog ključa pomoću metode GetSubKeyNames klase RegistryKey. Sljedeći isječak koda ilustrira kako se to može postići.

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;

       }

Da biste koristili metodu GetChildSubKeys i dohvatili sve podključeve određenog ključa, možete napisati sljedeći kod.

List lstSubKeys = GetChildSubKeys(subKey);