Makale Özeti

İleri düzey kurumsal ve akademik uygulamalar geliştiren programcıları hedef alan bu makalede .NET uygulamaları içerisinden yapılan Registry manipulasyonları anlatılmakta ve örneklenmektedir.

Makale

VB .NET İle Registry e Erişim

VB .NET Uygulamalarından Registry e Erişim

       İleri düzey kurumsal ve akademik uygulamalar geliştiren programcıları hedef alan bu makalede .NET uygulamaları içerisinden yapılan Registry manipulasyonları anlatılmakta ve örneklenmektedir.

       Kullanıcılar registry i normal yollar ile yapılamayan pek çok işlemin, üzerinde çeşitli manipülasyonlar ile yapılabildiği bir yer olarak görmektedirler. Teknik anlamda, registry; sistem düzeyinde tutulan hiyerarşik bir veri tabanıdır. Bu veri tabanı sisteme ve kurulu Win32 uygulamalarına ilişkin çeşitli bilgileri barındırmaktadır. Registry nin (olası trick ler barındırmasının ötesinde) biz programcıları ilgilendiren yanı; yazdığımız uygulamalara ilişkin bir takım kritik bilgilerin depolandığı bir veri tabanı olmasıdır. Programcı bakış açısından ise, sorun; kullandığı programlama dili ve bu dilin desteklediği kütüphanelerin registry üzerinde çalışmak için sağladığı programatik araçların ne olduğu ve nasıl kullanılacağı noktasında başlamaktadır.

       .NET Framework Class Library, registry erişimi için çeşitli sınıflar içermektedir. Bu sınıflar ile yapılan işlemler Win32 platformuna özgü olduğu için, MSCorlib.dll assembly si içerisinde bulunan Microsoft.Win32 namespace i altına konumlandırılmıştır.

Şekil : Win32 namespace ine ait hiyerarşi

Registry Ve RegistryKey Sınıfları

       Registry sınıfının, RegistryKey sınıfı türünde içerdiği yedi adet shared (statik) property, registry e ait temel anahtarları temsil etmektedir.

Public Shared ReadOnly ClassesRoot As RegistryKey

Public Shared ReadOnly CurrentConfig As RegistryKey  

Public Shared ReadOnly CurrentUser As RegistryKey

Public Shared ReadOnly DynData As RegistryKey

Public Shared ReadOnly LocalMachine As RegistryKey

Public Shared ReadOnly PerformanceData As RegistryKey

Public Shared ReadOnly Users As RegistryKey

       Bu property lerin içerdiği referans değerleri kullanılarak yaratılan, RegistryKey sınıfı türündeki nesneler ile, registry üzerinde çeşitli işlemleri gerçekleştirmek olanaklı hale gelir.

Örnek 1 : Aşağıdaki konsol uygulamasında, "HKEY_CLASSES_ROOT" anahtarı altında bulunan "Excel.Application" alt anahtarı, OpenSubKey() metodu kullanılarak açılmaya çalışılmıştır. Bu metot, parametresine ismi girilen alt anahtarı açabilirse, RegistryKey sınıfı türünde bir referans döndürür. Söz konusu alt anahtarın herhangi bir nedenden dolayı açılamaması durumunda ise, metot null referans döndürecektir. Örnekte dönen değer kontrol edilerek, söz konusu uygulamanın sisteme install edilip edilmediği kontrol edilmektedir.

Imports Microsoft.Win32

Module Module1

Sub Main()
   
Dim obj As RegistryKey
    obj = Registry.ClassesRoot.OpenSubKey("Excel.Application") 
    If obj Is Nothing Then
        Console.WriteLine("Excel install edilmemiştir !") 
    Else
        Console.WriteLine("Excel install edilmiştir !")
    End If
End Sub

End Module

Registry nin Programatik Olarak Düzenlenmesi

       Şüphesiz Registry ve RegistryKey sınıfları ile yapılabilen işlemler sadece registry den veri okuma ile sınırlı değildir. Veri okumanın ötesinde registry üzerinde ekleme, silme ve değişiklik yapma gibi işlemler de mümkündür.

Örnek 2 : Aşağıdaki konsol uygulamasında, "H_KEY_LOCAL_MACHINE\SOFTWARE" anahtarı açılmış ve CreateSubKey() metodu kullanılarak iki alt anahtar registry e eklenmiştir. CreateSubKey() metodu, yaratılmak istenen anahtarın ismini parametre olarak kabul etmektedir.

Imports Microsoft.Win32

Module Module1

Sub Main()
  
Dim oKey As RegistryKey 
   Dim oCompany As RegistryKey 
   Dim oProduct As RegistryKey 
   Try 
      oKey = Registry.LocalMachine.OpenSubKey("SOFTWARE", True)
      oCompany = oKey.CreateSubKey("XProjecTT")
      oProduct = oCompany.CreateSubKey("XProjecTT CallCenter") 
   Catch exc As Exception
      Console.WriteLine(exc.Message) 
   Finally
      oProduct.Close()
      oCompany.Close()
      oKey.Close()
   End Try
End Sub

End Module

Şekil : Yaratılan anahtarların görünümü

       DeleteSubKeyTree() metodu ise, parametresine ismi girilen anahtarın içerdiği hiyerarşik ağaç yapısı içindeki tüm alt anahtarları siler.

Örnek 3 : Aşağıdaki konsol uygulamasında, örnek 2 de yaratılan anahtarlar DeleteSubKeyTree() metodu kullanılarak registry den silinmektedir.

Imports Microsoft.Win32

Module Module1
    Sub Main()
        
Dim oKey As RegistryKey
        oKey = Registry.LocalMachine.OpenSubKey("SOFTWARE", True)  
        oKey.DeleteSubKeyTree("XProjecTT")
        oKey.Close()
    End Sub
End Module

Uyarı : Registry, üzerinde bilinçsizce çalışılmak için son derece yanlış bir seçimdir. Bu nedenle, işlevi hakkında bilgi sahibi olunmayan bir anahtarın silinmesi ya da üzerinde değişiklik yapılması istenmeyen sonuçlara neden olabilir.


Aykut TAŞDELEN

aykutt@csdos.org