Удалить программное обеспечение через реестр - PullRequest
1 голос
/ 10 мая 2011

Я знаю, что об этом уже спрашивали, но терпите меня. У меня есть утилита, которая читает местоположение 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, но я не понимаю, как пройти для всех пользователей. В дампе, который я предоставил, Нортону нужно идти, но я не вижу, как это сделать.

Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 17 мая 2011

Я согласен с комментарием Селби об использовании «UninstallString» (хотя иногда у вас его тоже не будет, но для использования MSI можно просто получить GUID и использовать msiexec /x {GUID}).

Тем не менее, я бы не рекомендовал удалять продукты Norton A / V с помощью этого метода. Поскольку их деинсталляторы дерьмовы и часто оставляют после себя множество частей программного обеспечения, которые должны были быть удалены, Symantec предоставляет инструмент, который фактически выполняет работу безопасно: инструмент удаления Norton . Настоятельно рекомендуется!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...