WindowsАдминистрирование

Удаление программ из консоли и простой пример мониторинга реестра

На форуме OSZone модератор DJ Mogarych задал вопрос на тему удаления программ по сети. Команда wmic не видела ряд приложений, отображаемых в элементе панели управления «Установка и удаление программ». Нужно было их найти!

По условиям задачи, у вас нет возможности работать в системе интерактивно, поэтому нужно сформировать команду для тихого удаления программы. Ее выполнение – уже дело техники или инфраструктуры (есть psexec). Но сначала давайте познакомимся со способом, который ветеран OSZone применяет для решения задачи.


Сведения из класса WMI Win32_Product

Этот способ базируется на инструментарии управления Windows (WMI). Сведения об установленных программах содержатся в классе Win32_Product, поэтому можно удалять программы из командной строки или PowerShell.

CMD

Коллега по форуму пользуется командaми из арсенала консоли WMI. Вот так можно посмотреть список установленных программ наряду с основными сведениями о них:

1wmic product get name,version,vendor

Зная имя программы, можно тихо удалить ее:

1wmic product where name="Имя программы" call uninstall /nointeractive

PowerShell

Командлет Get-WMIObject вам хорошо знаком. Список программ:

1Get-WmiObject Win32_Product | ft name,version,vendor,packagename

Удаление программы:

1(Get-WmiObject Win32_Product -Filter "Name = 'Имя программы'").Uninstall()

Недостаток способа

Этот подход сопряжен с большим ограничением, которое отчасти породило вопрос на форуме. Элемент панели управления «Установка и удаление программ» отображает больше приложений, чем выводят wmic и PowerShell.

В списке WMI присутствуют только приложения, установленные с помощью Windows Installer.

Это не совсем очевидно, но я специально добавил в первую команду PowerShell вывод имен пакетов — все они MSI. Инструментарий управления Windows спроектирован в том числе и для управления состоянием ПО, но далеко не все программы используют установщик Windows, к сожалению.

Сведения из реестра Windows

Зато все нормальные программы при установке должны записывать сведения в реестр, откуда их извлекает элемент панели управления appwiz.cpl. Конкретный раздел реестра хорошо известен и давно задокументирован в статье KB314481 (ее я всегда нагугливаю запросом uninstall registry).

1HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

У каждого приложения там свой подраздел, именем которого по воле разработчика является название или идентификатор программы. Команда для удаления записана в параметре UninstallString – именно она вызывается из панели управления.


Заметьте, что команда открывает графический интерфейс деинсталлятора, но не удаляет программу автоматически, как в случае со способом WMI. Поэтому нужно еще выяснить ключ тихой установки/удаления, зависящий от типа установщика. Зачастую, это /s или /silent, и тогда команда для автоматического удаления выглядит примерно так:

1"C:\Program Files\VideoLAN\VLC\uninstall.exe" /s

Но и у этого способа есть нюанс – в обсуждаемом разделе реестра могут отображаться не все программы. Например, я не нашел там установленный uTorrent (проверьте у себя).

Откуда панель управления о нем знает? К ответу можно прийти поиском по реестру или просто догадаться, но лучше сразу взять простой и удобный инструмент — Process Monitor.


Быстрый мониторинг реестра с помощью Process Monitor

Давайте выясним, откуда «Установка и удаление программ» берет сведения об установленном uTorrent. На панели инструментов Process Monitor и Process Explorer есть мишень, помогающая точно определить процесс.

Перетяните мишень из Process Monitor на окно панели управления.

В панели управления выполните поиск программы, чтобы спровоцировать запрос в реестр.


В Process Monitor нажмите Ctrl + F и поищите имя программы или издателя (я искал torrent).

Перейдите в редактор реестра сочетанием клавиш Ctrl + J

Обратите внимание на имя раздела реестра. Это пользовательский раздел HKEY_CURENT_USER, а остальной путь идентичен системному разделу HKLM, который рассматривался выше.

Помимо uTorrent в этом разделе у меня отметился браузер Яндекс и одно приложение Microsoft, пожелавшее не афишировать свое название в имени подраздела. Заметьте, что Process Monitor помог найти нужную информацию моментально!


Почему приложения записывают сведения в разные разделы реестра

Для эксперимента выполните повторную установку uTorrent или любого другого приложения из списка HKCU. По ходу дела вы не увидите запроса UAC. Приложению для установки и работы не нужны права администратора, поэтому нет необходимости ставить его в Program Files и вносить изменения в HKLM. Оно устанавливается в профиль и пишет сведения только в раздел реестра HKCU.

Применительно к удалению тут есть еще один нюанс – программа установлена в профиль конкретного пользователя, что видно на рисунке выше (Users\Vadim). Поэтому при дистанционном удалении команда должна содержать абсолютный путь, если только не выполняется от имени этого пользователя.

Традиционный же способ установки программ сопряжен с требованием прав администратора, сохранением файлов приложения в Program Files и записью сведений в HKLM. Даже если технически в этом нет нужды, разработчики могут идти навстречу администраторам, помогая им контролировать установку программ на ПК и проводить инвентаризацию ПО.

Мне попадались приложения, в которых установщик ориентируется на текущие права пользователя – администратору показывает запрос UAC, а пользователю сразу ставит в профиль.


Литература

Для дальнейшего изучения вопроса вам могут пригодиться подобранные мной материалы. Открывает список статья, которой скоро исполнится 10 лет. Она еще из первой волны материалов на тему автоустановки, но вполне актуальна.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *