2014-04-04 2 views
5

Итак, у меня есть служба Windows, которая может иметь несколько экземпляров, установленных на одном сервере. Установщик должен иметь возможность обновить один экземпляр. Установщик использует Instance Transforms, но я не уверен, как получить основные обновления, которые я бы хотел.WiX - Выполнение основного обновления при установке нескольких экземпляров

Для серьезной модернизации на работу, я понимаю, что я должен иметь изменение кода продукта, поэтому экземпляры определяются в таком виде:

<Instance ProductCode="*" 
      UpgradeCode="{SOMEGUID}" 
      ProductName="Instance 1" 
      Id="Instance1"/> 

Маврикийской может быть запущен, чтобы установить новый экземпляр по:

msiexec.exe /i "installer.msi" TRANSFORMS=:Instance1 MSINEWINSTANCE=1 

Однако, после долгих поисков, единственный способ я нашел, чтобы запустить обновление на конкретном экземпляре этот формат:

msiexec.exe /i "installer.msi" /n {PRODUCTCODE} REINSTALL=ALL REINSTALLMODE=vamus 

Проблема в том, что код продукта автогенерируется для основных обновлений, тогда я не знаю, что это такое, поэтому я не могу перейти к аргументам команды.

Есть ли способ запустить обновление с использованием экземпляра экземпляра Instance или InstanceID или ProductCode? Так как оба они останутся статичными. В качестве альтернативы, могу ли я запустить msi без аргументов, выбрать существующий экземпляр (через проверку реестра) в диалоговом окне пользовательского интерфейса и установить соответствующие свойства, чтобы заставить msi перейти в режим обновления для этого экземпляра?

+0

Это может показаться вам полезным: http://sklyarenko.net/blog/2011/09/14/revisited-multiple-instance/ –

+0

Мне кажется, что как только каждый экземпляр установлен, это продукт с кодом продукта ,Если вы выполняете обновление, то вашему новому продукту просто нужно сделать скучное крупное обновление и заполнить его таблицу обновлений материалом, который заменит любой предыдущий продукт, который он должен заменить. Не то, чтобы я много знал о примерах, но вы пробовали использовать обычный подход к использованию таблиц обновления, которые заставляют ваш новый экземпляр обновлять каждый из ваших старых экземпляров. Вы говорите, что не можете обновлять каждый продукт отдельно, потому что все они имеют один и тот же файл обновления? Такая же версия? – PhilDW

+0

Чтобы сообщить вам, что вы можете получить ** полный список ** ** кодов продуктов **, ** коды обновления ** и ** названия продуктов ** на данной машине через PowerShell: [** Как можно Я нашел код обновления для установленного файла MSI? ** (https://stackoverflow.com/questions/46637094/how-can-i-find-the-upgrade-code-for-an-installed-msi-file/46637095 # 46637095). –

ответ

1

Вот что я сделал до сих пор, чтобы справиться с модернизацией 3 отдельных экземпляров:

<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"

+0

Это более или менее точно то, что я закончил делать. Я не могу сказать точно, если бы это сработало в то время, когда вопрос был открыт, но поддержка wix multi-экземпляра прошла долгий путь с тех пор, и это, безусловно, сейчас работает. – AndyK

8

Довольно уверен, что вам нужен код продукта для этого, так как код обновления идентифицирует семейство продуктов, а не один.

Огонь до PowerShell и запустить эту команду, чтобы получить список установленных продуктов с кодом продукта:

Get-WmiObject -Class win32_product 

Вот другой способ, чтобы получить вывод в табличном формате (IdentifyingNumber is ProductCode):

Get-WmiObject Win32_Product | Format-Table IdentifyingNumber, Name, Version 

Код товара также можно найти в таблице свойств скомпилированного М SI с помощью Orca (MSI SDK tool):

enter image description here

+0

См. Также: http://stackoverflow.com/a/24340339/129130 –

+0

Инструмент Orca сделал это для меня! – Antebios

Смежные вопросы