|
C# ile Windows Registry İşlemleri(Microsoft.Win32) |
|
Gönderiliyor lütfen bekleyin... |
|
|
Hemen hemen her profesyonel uygulamada gördüğümüz Registry'ye yazma ve ordan
okuma işlemlerinin nasıl yapıldığını basit bir uygulama ile anlatacağız. Düşününki
bir uygulama geliştirdik ve uygulama her çalıştığında kullanıcıyı selamlamak
istiyoruz ve uygulamayı kaçıncı defa çalıştırdığını söylemek istiyoruz ona.
Bunun bir çok yolu olmasına rağmen en güzel ve en güvenilir yolu ilgili bilgileri
Windows un registry dediğimiz bölgesinde tutmaktır. registry dediğimiz yerler
olmasaydı pek ala bu işi dosyaya yazma ve okumayla da yapabilirdik. Regsitery
bölgesini okuma ve yazma amaçlı .NET framework sınıf kütüphanalerinden faydalanacağız.
Bu sınıflar Microsft.Win32 isimalanının altında bulunmaktadır. Bu sınıfların
en çok kullanılan metodlarını ve özelliklerini anlatmaya başlamadan önce programızın
yapısını kısaca anlatayım.
Bir console uygulaması oluşturacağız. Program
ilk çalıştığında bize bundan sonraki açılışlarında bizi selamlaması için
adımızı soracak.Daha sonra programı çalıştırdığımızda "Hoşgeldin Sefer. Programı
3. defa çalıştırıyorsunuz." diyecek. Programın kaç defa çalıştığını anlamak
için ise program ilk açıldığında registry bölgesine "1" değerini yazacağız
ve programın her çalıştığında o değeri bir artıracağız. Böylece programın
kaç defa çalıştığını öğrenmiş olacağız. Tabi eğer Windows un
aracıyla daha önceden uğraştıysanız bizim programlama yoluyla değiştirdiğimiz
değerleri kendi ellerinizle gidip değiştirebilirsiniz. Demek istediğim burda
şifre ve kullanıcı adı gibi bazı kişiye özel bilgilerin saklanması pek güvenli
değildir.
Eğer şu ana kadar registry hakkında bir bilginiz yoksa Start->Run ' menusune
gelip regedit yazarak registry hakkında biraz bilgi edinebilirsiniz. Bu programla
rastgele değerler silerseniz bazı programlarınız zarar görebileceği için tavsiyem
her hangi bir silme işlemi yapmayan ve sadece neler olup
bittiğine bakın.
Şimdi C# ın büyük bir kolaylık sağladığı registry yazma ve okuma için geliştirilmiş
RegistryKey sınıfının işlevlerini görelim.
::::
RegistryKey Sınıfı(Microsoft.Win32) ::::.
Bildiğiniz
gibi windowsun register yapısı ağaç şeklindeki klasörlere benzer. Her yeni anahtar
altında bir alt anahtar açabildiğimiz gibi anahtarlar altında yeni "string"
yada "int" gibi değerler oluşturup programla ilgili istediğimiz değerleri
saklayabiliriz. Bu ise klasörlerde oluşturduğumuz dosyalara benzer. Daha öncede
dediğimiz gibi buraya regedit le kolayca ulaşabildiğimiz için güvenlik amaçlı
bilgileri (şifre vs) veya programımızla ilgili kritik bilgileri(serial number
vs) burada saklamamamız gerekir. Biz bu programdaki bilgilerimizi HKEY_LOCAL_MACHINE\Software
altında csnedir isimli bir alt anahtar oluşturarak kaydedeceğiz.
RegisteryKey sınıfı türünden bir nesne oluşturmak için ya RegiteryKey sınıfının
static üye fonksiyonu olan OpenSubKey() metodunu yada yada Register sınıfının
static üyelerini kullanırız. Aşğıda detaylı olarak bu metodlar hakkında bilgi
bulabilirsiniz.
:: CreateSubKey() Metodu ::
Geriye RegistryKey
türünden bir nesne dödüren bu fonksiyon yeni bir alt anahtar oluşturur yada
var olan bir anahtarı okumak için açar.Fonksiyonun prototipi aşağıdaki gibidir.
Unutmayın bu metodu kullanabilmek için ilgili kullanıcının register bölgesine
erişim hakkının olması gerekir. Aksi halde SecurityException hatası oluşur.
public RegistryKey CreateSubKey(string subkey);
::
OpenSubKey() Metodu ::
Bu metod
iki şekilde kullanılabilir, overload edilmiş iki metod aşağıdaki gibidir.
public RegistryKey OpenSubKey(string);//Bu metod anahtar okumak amcıyla kullanılır
ve geriye RegisteryKey döndürür.
public RegistryKey
OpenSubKey(string,bool);//Bu metod ilk metod ile aynıdır fakat eğer açılacak
anahtara yazmada yapacaksak ikinci parametreyi true olarak girmemiz gerekir.
Varsayalın olarak ReadOnly açılır.
::
DeleteSubKey() Metodu ::
Bu metod
iki şekilde kullanılabilir, overload edilmiş iki metod aşağıdaki gibidir.
public void DeletSubKey(string);//Parametre olarak gönderilen alt anahtarı siler.
public void DeletSubKey(string,bool);//Parametre
olarak gönderilen alt anahtarı siler.İkinci parametre ise belirtilen alt anahtarın
olmaması durumunda "ArgumentNullException" hatasının yakalnıp yakalanmayacağını
gösterir.Eğer true ise bu hata yakalanır, false ise herhangi birşey olmaz.
::
DeleteSubKeyTree() Metodu ::
Bu metod
iki belirtilen anahtardaki bütün anahtarları siler.Bir dosyayı sildiğinide içindeki
tüm dosyaları sildiğiniz gibi.Prototipi aşağıdaki gibidir.
public
void DeletSubKeyTree(string);
::
DeleteValue() Metodu ::
İki şekilde
kullanılabilir.Parametre olarak belirtilen değeri anahtardan siler.İkinci
parametre ise DeleteSubKey() metodunda olduğu gibi hata yakalanıp yakalanmayacağını
belirtir.
::
Flush() Metodu ::
Registry 'de yaptığımız
değişiklikleri diske kaydetmek için bu metodun çağrılması gerekir.
::
GetSubKeyNames() Metodu ::
Be metod geriye
döndürdüğü string dizisine ilgili anahtardaki alt anahtar isimlerini doldurur.Prototipi
aşağıdaki gibidir.
public string[] GetSubKeyNames()
::
GetValue() Metodu ::
İlgili anahtardaki
değerin içeriğini object türü olarak geri dönderir.İki şekilde kullanılabilir.
Parametrik yapısı aşağıdaki gibidir.
public object GetValue(string)
public object GetValue(string,object) //eğer değer yoksa varsayılan olarak parametre
olarak verilen object geriye döner.
::
GetValueNames() Metodu ::
İlgili anahtardaki
bütün değerleri bir string dizine aktarır.Parametrik yapısı aşağıdaki gibidir
public string[] GetValueNames()
::
SetValue() Metodu ::
Birinci parametresi
ile belirtilen anahtara ikinci parametresi ile belirtilen bilgi aktarılır.Parametrik
yapısı aşağıdaki gibidir.
public void SetValue(string,object)
::
Name Özelliği ::
Taban anahtardan
itibaren(mesela HKEY_LOCAL_MACHINE) ilgili anahtarın tam yolunu verir.
::
ValueCount Özelliği ::
Anahtarda bulunan
değerlerin sayısını verir.
RegistryKey sınıfının üye elmanları ve oluşturduğu exception sınıfları ile ilgili
detaylı bilgiyi MSDN Online' dan yada .NET Framework SDK Documentation ' dan
edinebilirsiniz.
Şimdi yazımızın başında bahsettiğimiz örnek uygulamamıza göz atalım.Aşağıda
bulunan kaynak kodda satır aralarına size yardımcı olacak yorumlar ekledim.
//registry.cs
using System;
using System.Win32
//RegistryKey sınıfını kaynakkodda direkt kullanabilmek
için bu isimalanını ekledik.
class CsReg
{
public static void Main()
{
RegistryKey register; register =
Registry.LocalMachine.OpenSubKey(@"Software\csnedir",true);
//HKEY_LOCAL_MACHINE/Software/csnedir
anahtarını oluşturup anahtara yazma modunda açıyoruz.
if (register.GetValue("ad") ==
null)
{
/*Bu if bloğunda programın
ilk defa çalışması durumu ile ilgili işlemler yapılıyor.Programın ilk defa çalıştığını
register.GetValue("ad") ==null ifadesi ile anlıyoruz. Kullanıcıdan
isim alınıp registry de "ad" isimli anahtara yazılıyor ve tabili "Oturum"
adınıda programı bir defa çalıştırdığını belirten 1 değeri yazılıyor*/
Console.WriteLine("Lütfen
adinizi yaziniz");
string ad = Console.ReadLine();
register.SetValue("ad",(string)ad);
register.SetValue("oturum",1);
Console.WriteLine("Tesekkürler...");
}
else
{
/*Bu blokta ise programın
sonraki çalışmaları ile ilgili işlemler yapılıyor. Oturum sayısı registry den
okunup aritmetik işem yapabilmek için ilgili formata dönüştürüdükten sonra tekrar
yeni değeri ile registry ye yazılıyor.Aynı şekilde registry den "ad"
değeri alınarak kullanıcı selamlanıyor.*/
string ad = (string)register.GetValue("ad");
int oturum_sayisi=Convert.ToInt32(register.GetValue("oturum"))+
1;
register.SetValue("oturum",oturum_sayisi);
Console.WriteLine("Hosgeldin
" + ad);
Console.WriteLine("Programi
" + oturum_sayisi + " kez açtiniz");
Registry.LocalMachine.Flush();
}
}
}
Makale:
C# ile Windows Registry İşlemleri(Microsoft.Win32) C#, Visual C# ve .NET Sefer Algan
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|