LINQ ile Bilgisayara Kurulu Programları Sorgulamak
Bu yazımda, bilgisayarda kurulu programları, LINQ kullanarak nasıl sorgulayacağımızı inceleyeceğim.
Bilgisayara kurduğumuz her program bilgisayarın Registry‘sine kurulum ile ilgili bir kayıt bırakır.
Bilmeyenler için not: Registry’yi açmak için komut satırına regedit yazmanız yeterli.
Registry ile ilgili daha detaylı bilgi için MSDN: Registry sayfasına bakmanızı tavsiye ederim.
Registry‘nin LocalMachine\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall dalında, bilgisayara kurulu olan uygulamalara ve bu uygulamalar ile ilgili bilgilere ulaşılabilir.
Uygulamamızda, Registry class’ını kullanabilmek için, kodumuza aşağıdaki namespace’i eklememiz gerekiyor.
using Microsoft.Win32;
Hemen form tasarlamakla başlayalım.
Yukarıdaki formu oluşturduktan sonra btnGetir butonunun Click olayına aşağıdaki kodu yazalım;
using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"))
{
var programlar = from k in rk.GetSubKeyNames()
let r = rk.OpenSubKey(k)
select r.GetValue("DisplayName");
foreach (string program in programlar)
if (!string.IsNullOrWhiteSpace(program))
lbProgramlar.Items.Add(program);
}
Registry sınıfının static LocalMachine üyesi üzerinden OpenSubKey() method’unu çağırıyoruz.
Daha sonra yaptığımız;
from k in rk.GetSubKeyNames()
let r = rk.OpenSubKey(k)
select r.GetValue("DisplayName");
LINQ sorgusunu yazmak oluyor. Bu sorgu, ilgili Registry dalının altında bulunan tüm dalları açar ve içlerindeki DisplayName anahtarının değerini getirir.
Son olarak basit bir foreach döngüsü ile bu değerleri lbProgramlar Listbox kontrolüne dolduruyoruz.
İşte benim bilgisayarımdaki sonuç;
İlgili diğer başlıklar:


Merhaba,
Yazı için teşekkürler.
Peki listbox’daki seçili programın label’da üreticisini göstermek için “SelectedIndexChanged” olayına nasıl bir LINQ sorgusu yazabiliriz acaba ? Aynı mantıkla “DisplayName” yerine “Publisher” değeriyle çekmeye çalıştığımda label’a bütün üreticileri listeliyor. Listbox’un SelectedItems özelliğiyle kullanmaya çalıştım ama işin içinden çıkamadım.
Teşekkürler.