C#nedir?com
 
YAZAR HAKKINDA
Sefer Algan
Sefer Algan
http://www.seferalgan.com
İletişme geçmek için tıklayın.
71 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler:  C# / VC#/.NET Sefer Algan
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : C# / VC#/.NET
Yayınlanma Tarihi : 15.1.2003
Okunma Sayısı : 43841
Yorum Sayısı : 10     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
XML - Deniz Kılınç
emre TAŞ
yazının devamı >
emre TAŞ
Decompiling and Reverse Engineering .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Masaüstü mü ? İnternet Mi? .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
.Net Kavramları - .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Yeni Başlayanlar için - .Net Radyo
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer 'in Blogu
Conda install environment.yml Package 25.3.2019
Turhal Temizer 'in Blogu
Mac OS/X Removing CUDA 25.3.2019
Burak Selim Şenyurt
Servis Çıktılarını Plotly.js ile Grafikleştirmek 25.3.2019
Burak Selim Şenyurt
Scala ile Tanışmak 25.3.2019
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
C# ile Windows Registry İşlemleri(Microsoft.Win32)
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
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
  • Yazılan Yorumlar
  • Yorum Yaz
EYL
24
2013
EYL
24
2013
EYL
3
2012
@ismail burak yucel'in çözümü problemi hallediyor.
OCA
11
2012
Peki ya Sistem 64 Bit ise Ne Olacak ??
OCA
11
2012
@phrozen korkmaz Haklı Arkadaşlar, OpenSubKey Var Olanı Açıp Üzerinde İşlem Yapmaya Yarıyor.
TEM
11
2010
register = Registry.LocalMachine.OpenSubKey(@"Software\csnedir",true); //HKEY_LOCAL_MACHINE/Software/csnedir anahtarını oluşturup anahtara yazma modunda açıyoruz. kodundan sonra aşağıdaki kod yazılmalı if(register==null) register = Registry.LocalMachine.CreateSubKey(@"Software\csnedir"); Böylelikle ilk register anahtarını oluşturmuş oluruz
NİS
14
2007
using System.win32 hata veriyo arkadaşlar. registry komutları çıkmıyor
ŞUB
5
2007
register = Registry.LocalMachine.OpenSubKey(@Softwarecsnedir,true) satırında OpenSubKey yerine CreateSubKey olmalı sanırım. Mevcut şekliyle hata veriyor.
NİS
1
2004
evet haklısın eray..
NİS
1
2004
sanırım yukarıdaki yazıda System.Win32 yerine Microsoft.Win32 olması gerekiyor :)
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • 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