Я знаю, что об этом уже спрашивали, но терпите меня. У меня есть утилита, которая читает местоположение Unistall в реестре, а затем сравнивает результаты со списком приложений, которые необходимо удалить. В 80% случаев это работает, но хитрость заключается в том, что один из удаляемых элементов - это антивирус (поэтому его можно заменить установкой AVG). Для многих компаний это не работает. Вот фрагмент того, как я получаю установленное программное обеспечение:
const string Win32Loc = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
//const string Win32Loc = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\USerData\S-1-5-18";
const string Win64Loc = @"Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall";
List<Application> apps = new List<Application>();
string location = bool64BitOs ? Win64Loc : Win32Loc;
using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(location))
{
foreach (string skName in rk.GetSubKeyNames())
{
using (RegistryKey sk = rk.OpenSubKey(skName))
{
apps.Add(new Application { DisplayName = sk.GetValue("DisplayName") == null ? "" : (string)sk.GetValue("DisplayName"), AppKey = skName });
}
}
}
Результаты выглядят следующим образом при записи в текстовый файл:
Имя Ключ PowerDVD InstallShield_ {6811CAA0-BF12-11D4-9EA1-0050BAE317E1}
Имя Ключ подключаемого модуля домашней страницы ESC InstallShield_ {E738A392-F690-4A9D-808E-7BAF80E0B398}
Имя Intuit SiteBuilder Ключ Intuit SiteBuilder
Имя Microsoft Visual J # 2.0 Ключ распространяемого пакета Microsoft Visual J # 2.0 Распространяемый пакет
Имя Norton AntiVirus Ключ NAV
Имя Windows Live Essentials Key WinLiveSuite
Имя Microsoft Visual C ++ 2008 ATL Update kb973924 - x86 9.0.30729.4148 Ключ {002D9D5E-29BA-3E6D-9BC4-3D7D6DBC735C
Итак, вы увидите, что в НЕКОТОРЫХ установках есть ключ, а в некоторых нет. Это означает, что 80% работающих имеют ключ для вызова MSIEXEC, а остальные отказывают. Я играю с установщиком / UserData / UserXXXXX / Products, но я не понимаю, как пройти для всех пользователей. В дампе, который я предоставил, Нортону нужно идти, но я не вижу, как это сделать.
Любая помощь будет принята с благодарностью.