- [+] Сьогодні в програмі
- CMD
- PowerShell
- недолік способу
- Відомості з реєстру Windows
- Швидкий моніторинг реєстру за допомогою Process Monitor
- Чому додатки записують відомості в різні розділи реєстру
- література
- дискусія
На форумі OSZone модератор DJ Mogarych задав питання на тему видалення програм по мережі. Команда wmic не бачила ряд додатків, що відображаються в елементі панелі управління «Установка і видалення програм». Потрібно було їх знайти!
За умовами завдання, у вас немає можливості працювати в системі інтерактивно, тому потрібно сформувати команду для тихого видалення програми. Її виконання - вже справа техніки або інфраструктури (є psexec ). Але спочатку давайте познайомимося з способом, який ветеран OSZone застосовує для вирішення завдання.
[+] Сьогодні в програмі
Відомості з класу WMI Win32_Product
Цей спосіб базується на інструментарії управління Windows (WMI). Відомості про встановлені програми містяться в класі Win32_Product, тому можна видаляти програми з командного рядка або PowerShell.
CMD
Колега по форуму користується командaмі з арсеналу консолі WMI. Ось так можна подивитися список встановлених програм поряд з основними відомостями про них:
wmic product get name, version, vendor
Знаючи ім'я програми, можна тихо видалити її:
wmic product where name = "Ім'я програми" call uninstall / nointeractive
PowerShell
Командлет Get-WMIObject вам добре знайомий . Список програм:
Get-WmiObject Win32_Product | ft name, version, vendor, packagename
Видалення програми:
(Get-WmiObject Win32_Product -Filter "Name = 'Ім'я програми'"). Uninstall ()
недолік способу
Цей підхід пов'язаний з великим обмеженням, яке частково породило питання на форумі. Елемент панелі керування «Установка і видалення програм» відображає більше додатків, ніж виводять wmic і PowerShell.
У списку WMI присутні тільки додатки, встановлені за допомогою Windows Installer .
Це не зовсім очевидно, але я спеціально додав в першу команду PowerShell висновок назв пакунків - всі вони MSI. Інструментарій управління Windows спроектований в тому числі і для управління станом ПО, але далеко не всі програми використовують інсталятор Windows, на жаль.
Відомості з реєстру Windows
Зате всі нормальні програми при установці повинні записувати відомості до реєстру, звідки їх витягує елемент панелі керування appwiz.cpl. Конкретний розділ реєстру добре відомий і давно задокументований в статті KB314481 (її я завжди нагугліваю запитом uninstall registry).
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall
У кожної програми там свій підрозділ, ім'ям якого з волі розробника є назва або ідентифікатор програми. Команда для видалення записана в параметрі UninstallString - саме вона викликається з панелі управління.
Зауважте, що команда відкриває графічний інтерфейс дєїнсталлятора, але не видаляє програму автоматично, як у випадку зі способом WMI. Тому потрібно ще з'ясувати ключ тихою установки / видалення, залежить від типу установника . Найчастіше, це / s або / silent, і тоді команда для автоматичного видалення виглядає приблизно так:
"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.
Process Monitor автоматично визначить процес вікна і відфільтрує по ньому результати моніторингу, в чому легко переконатися, відкривши список фільтрів поєднанням Ctrl + L. В даному випадку за руку був схоплений процес explorer.exe з PID 3704.
Зверніть увагу на ім'я розділу реєстру. Це розділу Користувачів HKEY_CURENT_USER, а решту шляху ідентичний системному розділу HKLM, який розглядався вище.
Крім uTorrent в цьому розділі у мене відзначився браузер Яндекс і один додаток Microsoft, що побажала не афішувати свою назву в імені підрозділу. Зауважте, що Process Monitor допоміг знайти потрібну інформацію моментально!
Чому додатки записують відомості в різні розділи реєстру
Для експерименту виконайте повторну установку uTorrent або будь-якого іншого програми зі списку HKCU. По ходу справи ви не побачите запиту UAC. Додатком для установки і роботи не потрібні права адміністратора, тому немає необхідності ставити його в Program Files і вносити зміни в HKLM. Воно встановлюється в профіль і пише відомості тільки в розділ реєстру HKCU.
Стосовно до видалення тут є ще один нюанс - програма встановлена в профіль конкретного користувача, що видно на малюнку вище (Users \ Vadim). Тому при дистанційному видаленні команда повинна містити абсолютний шлях, якщо тільки не виконується від імені цього користувача.
Традиційний же спосіб установки програм пов'язаний з вимогою прав адміністратора, збереженням файлів програми в Program Files і записом відомостей в HKLM. Навіть якщо технічно в цьому немає потреби, розробники можуть йти назустріч адміністраторам, допомагаючи їм контролювати установку програм на ПК і проводити інвентаризацію ПО.
Мені траплялися додатки, в яких установник орієнтується на поточні права користувача - адміністратора показує запит UAC, а користувачеві відразу ставить в профіль.
література
Для подальшого вивчення питання вам можуть стати в нагоді підібрані мною матеріали. Відкриває список стаття, якій незабаром виповниться 10 років. Вона ще з першої хвилі матеріалів на тему автоустановки, але цілком актуальна.
дискусія
Я вирішив розповісти про мету після того, як двічі за цілком святковий день скористався їй спочатку в Process Explorer, а потім в Process Monitor. Такі інструменти значно спрощують вивчення системи, і в нашому випадку відповідь на зовсім неочевидний питання знайшовся дуже легко. У мене майже два десятка записів про утиліти sysinternals , І майже всі завдання вирішуються в 2-3 ходу.
Судячи по форуму і поштою, новорічні свята багато читачів присвятили [пере] установці Windows, і я не виключаю появи невеличкої замітки за мотивами питань. Зазвичай, під час канікул я створюю декілька статей і ставлю їх на майбутні дати, але в цей раз не вийшло. Я не так багато часу проводив за ПК і навіть не зумів підвести підсумки велосезону оТ-о Втім, ідей і начерків тільки додалося :) Проте я поколупав блог і крім іншого прикрутив пошук в мобільне меню , Про що ви мене просили.
А ви чим високотехнологічним займалися в канікули? Чи готові до Windows 10 Consumer Preview через тиждень? :)
Обговорення завершено.
Звідки панель управління про нього знає?А ви чим високотехнологічним займалися в канікули?
Чи готові до Windows 10 Consumer Preview через тиждень?