C#

C# Bilgisayarda Kurulu Programları Listeleme

Herkese merhaba, C# yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda bilgisayarda kurulu programları listelemeyi anlatacağım. Hadi başlayalım !

Windows yüklü bilgisayarlara bir program kurduğunuzda programın bilgileri Regedit adını verdiğimiz Windows’un kendi veritabanına yazılmakta. Bu bilgiler arasında programın adı, versiyonu, nereye kurulduğu, dosya boyutu, kaldırma dosyasının (uninstall) yolu, yazarı, ne zaman kurulduğu, yayıncısı gibi bilgiler yer almakta. E Regedit’e yazıldığına göre C# gibi güçlü ve Windows üzerinde neredeyse tüm işlemleri yapabildiğimiz bir programlama dilini kullanarak Regedit’i okuyarak istediğimiz bilgileri elde edebiliriz. Bilgisayara kurulan bir program Regedit’te LocalMachine altındaki SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall alanına yazılmakta. Bizde bu yoldaki verileri okursak aslında bilgisayarda kurulu olan programları görebiliriz demektir.

C# ile Regedit işlemleri yapabilmek için Microsoft.Win32 paketini kullanmamız gerekiyor. Bu paket C# kurulumu ile beraber gelen paketlerden olduğu için herhangi bir işlem yapmadan doğrudan kullanabiliriz. Fakat tüm paketlerde olduğu gibi Microsoft.Win32 paketini de kullanabilmek için kod yazacağımız C# dosyasında bu paketi çağırmamız gerekiyor. Bunun için sayfanın en başına gelerek şu satırı ekleyelim;

using Microsoft.Win32;

Bu satırı da ekledikten sonra artık Microsoft.Win32 paketini kullanarak C# ile Regedit işlemlerimizi yapabiliriz. Regedit işlemlerimizi RegistryKey sınıfı ile yapabiliyoruz ve bu sınıfı kullanabilmek için öncelikle yeni bir nesnesini türetmemiz gerekiyor. Yeni bir nesnesini constructor metodunu kullanarak yapamıyoruz, bunun yerine Registry sınıfı altındaki LocalMachine nesnesi altındaki OpenSubKey() fonksiyonunu kullanarak yapıyoruz. Buradaki LocalMachine nesnesi Regedit’teki LocalMachine veritabanını temsil ediyor. Bu fonksiyon string tipte Regedit adresini parametre olarak istiyor ve parametre olarak gönderdiğimiz adresteki verileri okumamızı sağlıyor. Regedit adresi yazının başında da belirttiğim üzere SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall olacaktır. Buna göre yeni bir RegistryKey nesnesi oluşturalım;

RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall");

C#’ta \ (ters slaş) karakteri kaçış operatörlerini belirtmek için kullanılıyor fakat burada kaçış operatörü değil, Regedit adresindeki yolları ayırmak için kullanacağımız için parametrenin başına @ işareti koyarak doğrudan \ olarak yazılmasını sağladık. Yeni bir RegistryKey nesnesi oluşturduğumuza göre artık Uninstall klasörü altındaki verileri görebilir ve sonrasında okuyabiliriz anlamına geliyor. Uninstall klasörü altındaki verileri görebilmek için az önce oluşturduğumuz key nesnesi altındaki GetSubKeyNames() fonksiyonunu kullanacağız. Bu fonksiyon bize Uninstall klasörü altındaki tüm verilerin adını string dizisi olarak getirecek. Ardından bu dizi içerisinde döngü ile dönerek her bir klasör altındaki verileri okuyabiliriz. Bize bir dizi döndüğü için burada kullanacağımız döngünün foreach döngüsü olması daha makul olacaktır. Yani döngü gövdesi şu şekilde olacaktır;

foreach (string subKey in key.GetSubKeyNames()) { }

Buradaki subKey değişkeni string tipte olduğu için her bir program için oluşturulmuş olan veri alanı yani klasörlerin adını temsil ediyor. Klasörlerin içerisine girmek için key nesnesi altındaki OpenSubKey() fonksiyonunu kullanacağız ve bu fonksiyona subKey değerini parametre olarak göndereceğiz. Bu fonksiyon geriye RegistryKey nesnesi döndürdüğü için bunu da bir değişkene atayabiliriz. Değişkene atayacağız çünkü sonrasında lazım olacak 🙂

RegistryKey sub = key.OpenSubKey(subKey);

Artık her bir program için oluşturulmuş olan klasörleri sırayla açıp içerisine giriyoruz fakat henüz veri okuması yapmadık. Veri okumasını sub nesnesi ile yapacağız. Uninstall klasörü altındaki klasörlerde birden çok program bilgileri yer alıyor fakat programın adı DisplayName anahtarıyla saklanıyor. Yani biz DisplayName değerini okursak aslında programın adını öğrenmiş oluruz. Ayrıca programın versiyonunu öğrenmek istiyorsak DisplayVersion anahtarını okumamız gerekiyor. Fakat bilgisayardan kaldırdığınız programların Regedit üzerindeki kayıtları silinmeyip boş olarak değiştirildiği için hem DisplayName, hemde DisplayVersion bilgileri boş olabiliyor. Bu yüzden bu bilgilerin boş olup olmadığına da bakmamız gerekiyor. DisplayName ve DisplayVersion anahtarlarını okuyabilmek için sub nesnesi altındaki GetValue() fonksiyonunu kullanacağız. Bu fonksiyon string tipte bir parametre istiyor ve bu parametre okumak istediğimiz anahtar olması gerekiyor. Biz DisplayName ve DisplayVersion bilgilerini okuyacağımız için bu değerleri parametre olarak göndermemiz gerekiyor. Fonksiyon geriye object tipinde veri döndürüyor çünkü her ne kadar biz program adı ve versiyonunu okuyacak olsak ve bu bilgiler string tipte olsa da Regedit’e sadece string veriler yazılmamakta ve GetValue() fonksiyonu bizim string veri okuyacağımızı bilmemekte. Bu sebepten object olarak gelen veriyi stringe çevirmeden object olarak kullanmamız gerekiyor. Çünkü gelen veri boş yani null olursa stringe çevirme işlemi hata verecektir. Veriyi object olarak alıp null kontrolü yaptıktan sonra doğrudan console ekranında gösterelim;

string programAdi = sub.GetValue("DisplayName");
string versiyonu = sub.GetValue("DisplayVersion");

if (programAdi != null && versiyonu != null)
    Console.WriteLine(programAdi + " - " + versiyonu);

Evet C# ile bilgisayarda kurulu programları listele bu şekilde yapılmakta. Yazdığımız tüm kodları daha toplu olması için aşağıya bırakıyorum;

RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"); 
foreach (string subKey in key.GetSubKeyNames())
{
    RegistryKey sub = key.OpenSubKey(subKey);
    string programAdi = sub.GetValue("DisplayName");
    string versiyonu = sub.GetValue("DisplayVersion");
    if (programAdi != null && versiyonu != null)
        Console.WriteLine(programAdi + " - " + versiyonu);
}

Tüm C# yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.

Skorumuz:
Oy Vermek İçin Tıklayın
[Toplam: 0 Ortalama: 0]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu