Как проверить функцию, установленную на MSI из другого продукта - PullRequest
1 голос
/ 23 сентября 2019

Если это тот же продукт, мы можем проверить с помощью кода обновления.Но мой случай немного другой.У меня есть MSI, где, если определенная функция установлена, то моя вторая MSI должна удалить первую MSI только эту конкретную функцию и установить ее функции.Примечание: Просто у нас есть код обновления 1-й msi.

Пожалуйста, предложите, как это сделать.

1 Ответ

0 голосов
/ 23 сентября 2019

Ниже используются VBScript и COM .Вы также можете сделать то же самое с помощью функций Win32 (C ++) .Я полагаю, что COM по сути является оберткой поверх реальных функций Win32.


Хмм, это звучит странно, но вы можете легко получить функции и их состояние:

Set i = Wscript.CreateObject("WindowsInstaller.Installer")
state = i.FeatureState("{PRODUCT-CODE-GUID-HERE}", "FeatureName")
MsgBox state

Состояние объекта: 3 - это нормальная локальная установка.Остальное: Что означает номер состояния функции? ( пример использования ).

Если вам необходимо получить код продукта из кода обновления:

Set installer = CreateObject("WindowsInstaller.Installer")
Set upgrades = installer.RelatedProducts("{UPGRADE-CODE-GUID-HERE}")

For Each u In upgrades
   MsgBox u, vbOKOnly, "Product Code: "
Next

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


Фрагмент для удаления функции. Используйте Orca, чтобы найти реальное имя функции :

Set i = Wscript.CreateObject("WindowsInstaller.Installer")
config = i.ConfigureFeature ("{PRODUCT-CODE-GUID-HERE}", "FeatureName", 2)

Чтобы установить функцию, значение должно быть 3 (msiInstallStateLocal), для удаления 2 (msiInstallStateAbsent).


Ссылки :

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...