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;</pre> 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ç;

Senior Software Engineer, @Microsoft
Ada ve Ege'nin babası ;)
Makale Adedi: 484