Де Windows зберігає файли MSI для видалення?


22

Я намагаюся з'ясувати, як Windows (XP через 7) обробляє інсталяцію та видалення файлів MSI. Я прийшов у ситуаціях, коли інсталятор Windows не може видалити, тому що відсутній оригінальний файл MSI, що змушує мене вважати, що він зберігає копію всіх встановлених пакетів MSI де-небудь. Де?

У мене було кілька теорій.

  1. Він очікує, що він буде перебувати в тій же папці, з якої він був встановлений. Розділи реєстру в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall вказує на початкову інсталяційну папку, і повідомлення про помилки, коли файл MSI відсутній, часто вказують на це. Видалення файлу MSI з цієї папки не перешкоджає процесу видалення, тому я відмовився від цієї теорії.

  2. C:\Windows\Installer. Ця папка фактично містить купу начебто випадково називаних файлів MSI. Але цей список є неповним. Я знаходжу записи в реєстрі, згаданому в 1), який не має копії MSI в цій папці.

Як же це працює? Як Windows Installer може видалити MSI-встановлені програми, навіть якщо MSI не в 1), а не в 2)?


Windows не завжди зберігає її. Існує багато способів, за якими користувач може повідомити Windows, що дійсно очистить кеш цих файлів. Якщо у вас є програмне забезпечення, яке не може бути видалено, це означає, що розробник побудував інсталятор неправильно. Розташування буде відрізнятися між Windows XP (чому ви стурбовані непідтримуваною операційною системою) і Windows 7 та / або Windows 8.
Ramhound

Відповіді:


37

Мабуть це працює так (на Windows 7, я не знаю про XP і інші ОС): \ t

Коли користувач встановлює деякі програми, Windows виконує такі дії:

1) Створює розділ реєстру

HKLM ПРОГРАМНЕ ЗАБЕЗПЕЧЕННЯ Microsoft \ t

для цієї програми.

Якщо у вас є доступ до оригінального файлу MSI інсталятора вашої програми, ви можете знайти [ProductID GUID], відкривши файл msi у orca.exe і натиснувши на "Властивість" ліворуч у orca, і шукаючи "ProductCode" лінія справа. Якщо у вас немає доступу до оригінального файлу * .msi, ви можете просто шукати ключ реєстру HKLM SOFTWARE Microsoft Windows CurrentVersion Видалення для назви програми.

Якщо ви хочете видалити вашу програму (яка, наприклад, відмовляється видаляти) зі списку встановлених програм на панелі керування, ви можете видалити запис з цього ключа видалення. Він, безсумнівно, зникне зі списку на панелі керування, але Windows все одно запам'ятає його. Наприклад, якщо ви спробуєте встановити наступну версію того ж самого додатка, інсталятор може все ще наполягати на видаленні попередньої версії. Див. Пункт 2 для цього.

2) Windows копіює оригінальний файл * .msi у папку C: Windows Installer і перейменовує його у випадкове ім'я (хоча розширення .msi зберігається). Windows також створює ключ у реєстрі у HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\[InternalUserId]\Products\[some random guid-like sequence of chars identifying to windows your installation]\InstallProperties. ValueName "LocalPackage" в цьому ключі reg вкаже на перейменований файл msi. Щоб знайти файл у папці C: windows Інсталятор ви можете перейти до цієї папки у вікні Windows Explorer, перемкнути її у вікно Details, зробити стовпчик "Subject" видимим, і ви побачите для всіх nnnnnnnnn.msi відповідне ім'я продукту.


4
Я хотів двічі проголосувати за прихований секрет - make column "Subject" visible and you will see for all nnnnnnnn.msi fies their corresponding name of product.. Windows є такою загадковою операційною системою: P
RBT

3) Для мене був необхідний крок 3. Мені довелося скопіювати файл 5188bfc6.msi (hex # .msi) і перейменувати його у вихідне ім'я файлу MyApp.msi. Після цього видалення працювало нормально.
Joe B
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.