I read a lot of information of getting programs. None of algorithms did do what I want. I need to get installed programs exactly like in control panel.
So I used:
- WMI
Win32_Product
class. It shows only msi installed programs.
- Registry keys.
HKLMSOFTWAREMicrosoftWindowsCurrentVersionUninstall
. Again, some programs are not displayed in control panel, some programs displayed in control panel not in this registry node.
So, is there anyone in this world, who knew which algorithm use control panel to display installed programs?
UPD1:yes, i use 64 bit, i know there is another node for 64bit installed programs "HKLMSOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionUninstall" but the following code enumerates twise HKLMSOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionUninstall section, strange...
var programs = new List();
string registry_key = @"SOFTWAREMicrosoftWindowsCurrentVersionUninstall";
using (Microsoft.Win32.RegistryKey key = Registry.LocalMachine.OpenSubKey(registry_key))
{
foreach (string subkey_name in key.GetSubKeyNames())
{
using (RegistryKey subkey = key.OpenSubKey(subkey_name))
{
var name = (string)subkey.GetValue("DisplayName");
if(!string.IsNullOrEmpty(name))
{
programs.Add(name);
}
}
}
}
registry_key = @"SOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionUninstall";
using (Microsoft.Win32.RegistryKey key = Registry.LocalMachine.OpenSubKey(registry_key))
{
foreach (string subkey_name in key.GetSubKeyNames())
{
using (RegistryKey subkey = key.OpenSubKey(subkey_name))
{
var name = (string)subkey.GetValue("DisplayName");
if (!string.IsNullOrEmpty(name))
{
programs.Add(name);
}
}
}
}
foreach (var program in programs.OrderBy(x => x))
{
Console.WriteLine(program);
}
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…