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

1 ответ1

37

По-видимому, это работает так (В 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 указано соответствующее название продукта.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .