Где Windows хранит файлы MSI для удаления?


25

Я пытаюсь выяснить, как 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 может удалить приложения, установленные MSI, даже если MSI не в 1), а не в 2)?


Windows не всегда хранит его. У пользователя есть много способов заставить Windows очистить кэш этих файлов. Если у вас есть программное обеспечение, которое нельзя удалить, это означает, что разработчик неправильно установил установщик. Расположение будет отличаться между Windows XP (почему вы беспокоитесь о неподдерживаемой операционной системе) и Windows 7 и / или Windows 8.
Ramhound

Ответы:


44

По-видимому, это работает так (В Windows 7 я не знаю о XP и других ОС):

Когда пользователь устанавливает какое-либо приложение, Windows делает следующее:

1) Создает раздел реестра

HKLM \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ [GUID ProductId]

для этого приложения.

Если у вас есть доступ к исходному msi-файлу установщика вашего приложения, вы можете найти [ProductID GUID], открыв msi-файл в orca.exe и нажав «Свойство» слева в orca и выполнив поиск «ProductCode». линия справа. Если у вас нет доступа к оригинальному * .msi-файлу, вы можете просто найти раздел реестра HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall по названию приложения.

Если вы хотите удалить свое приложение (которое, например, не удаляется) из списка установленных приложений на панели управления, вы можете удалить запись из этого ключа удаления. Он наверняка исчезнет из списка на панели управления, но 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 \ Installer, вы можете перейти к этой папке в проводнике Windows, переключить его в представление сведений, сделать видимым столбец «Тема», и вы увидите, что для всех файлов nnnnnnnn.msi указано соответствующее название продукта.


6
Я хотел дважды проголосовать за скрытый секрет 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, прежде чем деинсталлятор примет этот файл. После этого деинсталляция работала нормально.
Джо Б
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.