遍历注册表项"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"似乎可以给出已安装应用程序的完整列表.
除了下面的示例之外,您还可以找到与我所做的here个版本类似的版本.
这是一个粗略的例子,您可能想做一些事情来go 除空白行,如提供的第二个链接中所示.
string registry_key = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
using(Microsoft.Win32.RegistryKey key = Registry.LocalMachine.OpenSubKey(registry_key))
{
foreach(string subkey_name in key.GetSubKeyNames())
{
using(RegistryKey subkey = key.OpenSubKey(subkey_name))
{
Console.WriteLine(subkey.GetValue("DisplayName"));
}
}
}
或者,您也可以使用WMI,如前所述:
ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_Product");
foreach(ManagementObject mo in mos.Get())
{
Console.WriteLine(mo["Name"]);
}
但这执行起来相当慢,我听说它可能只列出在"ALLUSERS"下安装的程序,尽管这可能是不正确的.它还忽略了Windows组件&;更新,这可能对你很方便.