C# - A Windows regisztrációs adatbázisának elérése

forráskód letöltése
Ebben a cikkben annak járunk utána, hogy vajon miként is tudjuk elérni és kezelni a Windows regisztrációs adatbázisát a C# nyelvből.
Ehhez találunk egy RegistryKey osztályt a Microsoft.Win32 névtérben. Így használatához erre hivatkoznunk is kell a forráskódunkban:
    using Microsoft.Win32;
Mellékelt példában az egyik nyomógomb lenyomásának hatására létrehozunk egy új kulcsot a regisztrációs adatbázisba, majd eltárolunk benne egy szám értéket. Ehhez első lépésként kapcsolatot kell teremtenünk a regisztrációs adatbázissal. Ehhez az OpenRemoteBaseKey függvényt használjuk fel. Itt első paraméterként egy felsorolt típus egy elemét adjuk meg, mely a főkulcsra utal. Értéke az alábbiak egyike lehet:
  • ClassesRoot
  • CurrentConfig
  • CurrentUser
  • DynData
  • LocalMachine
  • PerformanceData
  • Users
Második paraméterben pedig a számítógép nevét adhatjuk meg. Null sztring esetén a saját gépről lesz szó.
Miután a kapcsolat létrejött létrehozunk egy új kulcsot, ahol majd az értékünket tároljuk. Ehhez a CreateSubKey függvény használható, mely szintén a RegistryKey osztály része. Itt paraméterként a létrehozandó kulcs nevét kell megadnunk. Ha már létezne az itt megadott kulcs, akkor az megnyitásra kerül. Visszatérési értékként egy RegistryKey objektumot kapunk.
Harmadik lépésként már csak a szükséges érték eltárolása marad hátra. Ebben a SetValue függvény segít bennünket. Ennek első paramétere a tárolási név, a második pedig annak értéke lesz.
      protected void button1_Click (object sender, System.EventArgs e)
      {
        RegistryKey key = RegistryKey.OpenRemoteBaseKey(RegistryHive.CurrentUser, "");
        RegistryKey subkey = key.CreateSubKey("Software\\Animare Software\\Sample");
        subkey.SetValue("Value", 12345);
      }
Egy eltárolt értéket kiolvasni a következő módszerrel tudunk. (Ez található a mellékelt példa második nyomógombjánál.) Szintén kapcsolatot létesítünk a regisztrációs adatbázissal, mint az előbb, majd megnyitjuk azt a kulcsot, melyből olvasni szeretnénk. Ehhez az OpenSubKey-t használjuk, ahol első paraméterként a megnyitandó kulcs nevét adjuk meg, másodikként opcionálisan megadhatunk egy logikai értéket, mely ha igaz, akkor a megnyitott kulcsba írhatunk, módosíthatunk is. Ha ezt nem tesszük, akkor csak olvasható kapcsolatunk lesz.
Az érték kiolvasásához pedig a GetValue függvényt használhatjuk, ahol paraméterként a kiolvasandó érték nevét adjuk meg.
      protected void button2_Click (object sender, System.EventArgs e)
      {
        RegistryKey key = RegistryKey.OpenRemoteBaseKey(RegistryHive.CurrentUser, "");
        RegistryKey subkey = key.OpenSubKey("Software\\Animare Software\\Sample");
        label1.Text = subkey.GetValue("Value").ToString();  
      }
Nézzük milyen lehetőségeink vannak még a RegistryKey osztályban.
Egy megnyitott kulcsot a Close függvénnyel zárhatunk le, míg ha törölni szeretnénk, akkor a DeleteSubKey-t használhatjuk, ahol paraméterként a törlendő kulcsot kell átadnunk. Ha a DeleteSubKeyTree-t használjuk törlésre, akkor a paraméterként megadott kulcs összes alkulcsa és értéke is törlésre kerül.
A DeleteValue függvénnyel egy nyitott kulcson belül törölhetünk egy értéket.
A GetSubKeyNames függvény egy sztring tömböt ad vissza az aktuálisan nyitott kulcson belül található alkulcsok neveiről. Ehhez hasonlóan a GetValueNames függvény az adott kulcson található értékek neveivel tér vissza.
Találunk a RegistryKey osztályban még három property-t is. A Name az aktuális kulcsot adja vissza sztringként. A SubKeyCount-ből az adott kulcson belül található alkulcsok számát olvashatjuk ki, míg a ValueCount property-ből az adott kulcson található értékek számát kapjuk meg.