WiX - значительное обновление при установке нескольких экземпляров
Итак, у меня есть служба Windows, которая может иметь несколько экземпляров, установленных на одном сервере. Установщик должен иметь возможность обновить один экземпляр. Установщик использует Instance Transforms, но я не уверен, как заставить работать крупные обновления так, как мне бы хотелось.
Для серьезного обновления, чтобы работать, я понимаю, что мне нужно изменить код продукта, поэтому экземпляры определяются в этой форме:
<Instance ProductCode="*"
UpgradeCode="{SOMEGUID}"
ProductName="Instance 1"
Id="Instance1"/>
Msi может быть запущен для установки нового экземпляра:
msiexec.exe /i "installer.msi" TRANSFORMS=:Instance1 MSINEWINSTANCE=1
Однако после долгих поисков я обнаружил, что единственный способ запустить обновление для конкретного экземпляра - это следующий формат:
msiexec.exe /i "installer.msi" /n {PRODUCTCODE} REINSTALL=ALL REINSTALLMODE=vamus
Проблема в том, что если код продукта автоматически генерируется для крупных обновлений, то я не знаю, что это такое, поэтому я не могу передать аргументы команды.
Есть ли способ запустить обновление, используя вместо этого UpgradeCode или InstanceID экземпляра или ProductCode? Так как оба из них останутся статичными. Или же я могу запустить MSI без аргументов, выбрать существующий экземпляр (с помощью проверки реестра) в диалоговом окне пользовательского интерфейса и установить соответствующие свойства, чтобы принудительно установить MSI в режим обновления для этого экземпляра?
2 ответа
Вот что я сделал до сих пор для обновления трех отдельных экземпляров:
<InstanceTransforms Property="Upgrade">
<Instance Id="I01" ProductCode="*" ProductName="Product Instance 1" UpgradeCode="55a25a09-5979-438d-91dd-67755012a288"/>
<Instance Id="I02" ProductCode="*" ProductName="Product Instance 2" UpgradeCode="a27eb2e5-9aa8-4d09-b6c0-df717875c310"/>
<Instance Id="I03" ProductCode="*" ProductName="Product Instance 3" UpgradeCode="d705720d-3703-4b17-817e-bd51edd9abea"/>
</InstanceTransforms>
В то время как моя собственность Upgrade является фиксированной Guid. Благодаря этому я могу обрабатывать 3 экземпляра с их обновлениями отдельно, используя эту строку - для новых установок добавьте MSINEINSTANCE = 1-:
msiexec / i MyProduct.msi MSINEWINSTANCE = 1 преобразование =":I01"
Уверен, вам нужен код продукта для этого, так как код обновления идентифицирует семейство продуктов, а не один.
Запустите PowerShell и выполните эту команду, чтобы получить список установленных продуктов с кодом продукта:
Get-WmiObject -Class win32_product
Вот другой способ получить выходные данные в табличном формате (IdentifyingNumber - ProductCode):
Get-WmiObject Win32_Product | Format-Table IdentifyingNumber, Name, Version
Вы также можете найти код продукта в таблице свойств скомпилированного MSI с помощью Orca ( инструмент MSI SDK):