Перебор раздела реестра «ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows \ CurrentVersion \ Uninstall», похоже, дает полный список установленных приложений.
Помимо приведенного ниже примера, вы можете найти версию, аналогичную той, что я сделал здесь .
Это грубый пример, вы, вероятно, захотите что-то сделать, чтобы убрать пустые строки, как во второй предоставленной ссылке.
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, которые могут быть вам полезны.