Respond needs javascript to run. To find out more click here
c# regity işlemleri » Serdar Demir
RSS
 

Posts Tagged ‘c# regity işlemleri’

C# ile Windows Registry Islemleri(Microsoft.Win32)

22 Tem

C# ile Windows Registry Islemleri(Microsoft.Win32)

Registry’ye yazma ve okuma işlemlerinin nasil yapilir ?
Hemen hemen her profesyonel uygulamada gördügümüz Registry’ye yazma ve ordan okuma islemlerinin nasil yapildigini basit bir uygulama ile anlatacagiz. Düsününki bir uygulama gelistirdik ve uygulama her çalistiginda kullaniciyi selamlamak istiyoruz ve uygulamayi kaçinci defa çalistirdigini söylemek istiyoruz ona. Bunun bir çok yolu olmasina ragmen en güzel ve en güvenilir yolu ilgili bilgileri Windows un registry dedigimiz bölgesinde tutmaktir. registry dedigimiz yerler olmasaydi pek ala bu isi dosyaya yazma ve okumayla da yapabilirdik. Regsitery bölgesini okuma ve yazma amaçli .NET framework sinif kütüphanalerinden faydalanacagiz. Bu siniflar Microsft.Win32 isimalaninin altinda bulunmaktadir. Bu siniflarin en çok kullanilan metodlarini ve özelliklerini anlatmaya baslamadan önce programizin yapisini kisaca anlatayim.
Bir console uygulamasi olusturacagiz. Program ilk çalistiginda bize bundan sonraki açilislarinda bizi selamlamasi için adimizi soracak.Daha sonra programi çalistirdigimizda “Hosgeldin Sefer

. Programi 3. defa çalistiriyorsunuz.” diyecek. Programin kaç defa çalistigini anlamak için ise program ilk açildiginda registry bölgesine “1″ degerini yazacagiz ve programin her çalistiginda o degeri bir artiracagiz. Böylece programin kaç defa çalistigini ögrenmis olacagiz. Tabi eger Windows un <regedit> araciyla daha önceden ugrastiysaniz bizim programlama yoluyla degistirdigimiz degerleri kendi ellerinizle gidip degistirebilirsiniz. Demek istedigim burda sifre ve kullanici adi gibi bazi kisiye özel bilgilerin saklanmasi pek güvenli degildir.

Eger su ana kadar registry hakkinda bir bilginiz yoksa Start->Run ‘ menusune gelip regedit yazarak registry hakkinda biraz bilgi edinebilirsiniz. Bu programla rastgele degerler silerseniz bazi programlariniz zarar görebilecegi için tavsiyem her hangi bir silme islemi yapmayan ve sadece neler olup
bittigine bakin.

Simdi C# in büyük bir kolaylik sagladigi registry yazma ve okuma için gelistirilmis RegistryKey sinifinin islevlerini görelim.
:::: RegistryKey Sinifi(Microsoft.Win32) ::::.

Bildiginiz gibi windowsun register yapisi agaç seklindeki klasörlere benzer. Her yeni anahtar altinda bir alt anahtar açabildigimiz gibi anahtarlar altinda yeni “string” yada “int” gibi degerler olusturup programla ilgili istedigimiz degerleri saklayabiliriz. Bu ise klasörlerde olusturdugumuz dosyalara benzer. Daha öncede dedigimiz gibi buraya regedit le kolayca ulasabildigimiz için güvenlik amaçli bilgileri (sifre vs) veya programimizla ilgili kritik bilgileri(serial number vs) burada saklamamamiz gerekir. Biz bu programdaki bilgilerimizi HKEY_LOCAL_MACHINE\Software altinda csnedir isimli bir alt anahtar olusturarak kaydedecegiz.

RegisteryKey sinifi türünden bir nesne olusturmak için ya RegiteryKey sinifinin static üye fonksiyonu olan OpenSubKey() metodunu yada yada Register sinifinin static üyelerini kullaniriz. Asgida detayli olarak bu metodlar hakkinda bilgi bulabilirsiniz.

:: CreateSubKey() Metodu ::

Geriye RegistryKey türünden bir nesne dödüren bu fonksiyon yeni bir alt anahtar olusturur yada var olan bir anahtari okumak için açar.Fonksiyonun prototipi asagidaki gibidir. Unutmayin bu metodu kullanabilmek için ilgili kullanicinin register bölgesine erisim hakkinin olmasi gerekir. Aksi halde SecurityException hatasi olusur.

public RegistryKey CreateSubKey(string subkey);

:: OpenSubKey() Metodu ::

Bu metod iki sekilde kullanilabilir, overload edilmis iki metod asagidaki gibidir.

public RegistryKey OpenSubKey(string);//Bu metod anahtar okumak amciyla kullanilir ve geriye RegisteryKey döndürür.

public RegistryKey OpenSubKey(string,bool);//Bu metod ilk metod ile aynidir fakat eger açilacak anahtara yazmada yapacaksak ikinci parametreyi true olarak girmemiz gerekir. Varsayalin olarak ReadOnly açilir.

:: DeleteSubKey() Metodu ::

Bu metod iki sekilde kullanilabilir, overload edilmis iki metod asagidaki gibidir.

public void DeletSubKey(string);//Parametre olarak gönderilen alt anahtari siler.

public void DeletSubKey(string,bool);//Parametre olarak gönderilen alt anahtari siler.Ikinci parametre ise belirtilen alt anahtarin olmamasi durumunda “ArgumentNullException” hatasinin yakalnip yakalanmayacagini gösterir.Eger true ise bu hata yakalanir, false ise herhangi birsey olmaz.

:: DeleteSubKeyTree() Metodu ::

Bu metod iki belirtilen anahtardaki bütün anahtarlari siler.Bir dosyayi sildiginide içindeki tüm dosyalari sildiginiz gibi.Prototipi asagidaki gibidir.
public void DeletSubKeyTree(string);

:: DeleteValue() Metodu ::

Iki sekilde kullanilabilir.Parametre olarak belirtilen degeri anahtardan siler.Ikinci parametre ise DeleteSubKey() metodunda oldugu gibi hata yakalanip yakalanmayacagini belirtir.

:: Flush() Metodu ::

Registry ‘de yaptigimiz degisiklikleri diske kaydetmek için bu metodun çagrilmasi gerekir.

:: GetSubKeyNames() Metodu ::

Be metod geriye döndürdügü string dizisine ilgili anahtardaki alt anahtar isimlerini doldurur.Prototipi asagidaki gibidir.

public string[] GetSubKeyNames()

:: GetValue() Metodu ::

Ilgili anahtardaki degerin içerigini object türü olarak geri dönderir.Iki sekilde kullanilabilir. Parametrik yapisi asagidaki gibidir.

public object GetValue(string)
public object GetValue(string,object) //eger deger yoksa varsayilan olarak parametre olarak verilen object geriye döner.

:: GetValueNames() Metodu ::

Ilgili anahtardaki bütün degerleri bir string dizine aktarir.Parametrik yapisi asagidaki gibidir

public string[] GetValueNames()

:: SetValue() Metodu ::

Birinci parametresi ile belirtilen anahtara ikinci parametresi ile belirtilen bilgi aktarilir.Parametrik yapisi asagidaki gibidir.

public void SetValue(string,object)

:: Name Özelligi ::

Taban anahtardan itibaren(mesela HKEY_LOCAL_MACHINE) ilgili anahtarin tam yolunu verir.

:: ValueCount Özelligi ::

Anahtarda bulunan degerlerin sayisini verir.

RegistryKey sinifinin üye elmanlari ve olusturdugu exception siniflari ile ilgili detayli bilgiyi MSDN Online’ dan yada .NET Framework SDK Documentation ‘ dan edinebilirsiniz.

Simdi yazimizin basinda bahsettigimiz örnek uygulamamiza göz atalim.
//registry.cs

using System;
using System.Win32
//RegistryKey sinifini kaynakkodda direkt kullanabilmek için bu isimalanini ekledik.

class CsReg
{
public static void Main()
{
RegistryKey register;
register = Registry.LocalMachine.OpenSubKey(@”Software\csnedir”,true);
//HKEY_LOCAL_MACHINE/Software/csnedir anahtarini olusturup anahtara yazma modunda açiyoruz.
if (register.GetValue(“ad”) == null)
{
/*Bu if blogunda programin ilk defa çalismasi durumu ile ilgili islemler yapiliyor.Programin ilk defa çalistigini register.GetValue(“ad”) ==null ifadesi ile anliyoruz. Kullanicidan isim alinip registry de “ad” isimli anahtara yaziliyor ve tabili “Oturum” adinida programi bir defa çalistirdigini belirten 1 degeri yaziliyor*/
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 programin sonraki çalismalari ile ilgili islemler yapiliyor. Oturum sayisi registry den okunup aritmetik isem yapabilmek için ilgili formata dönüstürüdükten sonra tekrar yeni degeri ile registry ye yaziliyor.Ayni sekilde registry den “ad” degeri alinarak kullanici selamlaniyor.*/
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();
}
}
}

not: Alıntıdır


 
2 Comments

Posted in C#