Мы создаем установщик с использованием WIX 3.6 для приложения Silverlight/WCF. Нам требуется возможность установки нескольких экземпляров, чтобы дать, например, «Live», «Test» и «Demo». Каждый экземпляр должен иметь возможность запускать другую версию и обновляться независимо. Это позволяет установить новую версию в «Тест» перед обновлением «Live».Как создать пользовательский интерфейс MSI, который позволяет отключить конкретный экземпляр при работе в режиме обслуживания
Я использую механизм InstanceTransforms для переключения ProductCode и CustomActions для переключения UpgradeCode на 10 экземпляров.
Мне также удалось создать пользовательский интерфейс, настроив MaintenanceTypeDlg, чтобы разрешить установку нового экземпляра без использования командной строки. Я установил MSINEWINSTANCE = 1 и TRANSFORMS =: экземпляр, где экземпляр является первым из моих экземпляров, который не может быть найден в реестре до ExecuteInstall.
Я также могу обновить экземпляр по умолчанию через основной путь обновления. Устранение и устранение неисправностей при добавлении и удалении программ также работают правильно.
У меня возникли проблемы с созданием механизма для обновления, восстановления или удаления определенного экземпляра из диалогового окна Maintenance.
Я создал ComboBox, который заполнен с помощью CustomAction с идентификатором и именами всех установленных экземпляров, но я не могу найти способ надежно передать эту информацию из InstallUISequence в InstallExecuteSequence.
Я попытался указать TRANSFORMS =: экземпляр, но сервер MSI удаляет свойство. Я попытался указать MSIINSTANCEGUID = {[SelectedGuid]}, но сервер MSI жалуется, что это недопустимое использование свойства, потому что это не установка нескольких экземпляров.
Мне удалось получить установку обновления конкретного экземпляра, работающего с использованием командной строки с помощью TRANSFORMS =: InstancetoUpgrade и перезаписывания свойства, установленного UpgradeTable, в правильный экземпляр ProductCode, однако он кэширует TRANSFORMS и всегда применяет это преобразование если в командной строке не указано TRANSFORMS =. Политика TransformsSecure установлена, но мы не сможем изменить эту политику на сайтах клиентов.
Я не смог найти документацию или примеры для MSI или WIX, которые отображают правильные свойства для установки между InstallUISequence и InstallExecuteSequence, чтобы заставить сервер обновлять, восстанавливать или удалять экземпляр, отличный от стандартного, в MSI, с которого был запущен пользовательский интерфейс.
Если кому-то удалось получить этот или аналогичный аспект работы с несколькими экземплярами MSI, отправьте любые образцы CustomActions, Properties и т. Д. Или подскажите, как это сделать.
EDIT:
мне удалось получить новую версию MSI для обновления конкретного экземпляра, установив свойства: UPGRADEFOUND = {PreviousInstanceGUID} трансформирует =: Instance;
Однако, если я попытаюсь запустить MSI еще раз, чтобы обновить экземпляр разности, то TRANSFORMS уже настроен на тот, который я только что обновил. Мой пользовательский интерфейс не может отличить MSI от двойного щелчка или запуска из сценария для обновления/восстановления конкретного экземпляра. Также похоже, что MSI игнорирует любые изменения свойства TRANSFORMS при переключении на сервер при работе в режиме обслуживания. Мне нужен способ справиться с тем, что в некоторых случаях он будет в режиме обслуживания и в других режимах обновления. Фактически, мне нужно иметь возможность повторно запускать FindRelatedProducts и AppSearch, когда в пользовательском интерфейсе выбран экземпляр разности.
Я подавляю ARPMODIFY, но я получаю запись для каждого экземпляра в «Установка и удаление программ». Я могу восстановить и удалить экземпляр оттуда без каких-либо проблем.Однако то, что мне нужно сделать, это выбрать конкретный экземпляр при запуске новой версии MSI для выборочного обновления экземпляров. – Alban
«При запуске новой версии», которая звучит как запуск MSI для меня. Я почему-то думал о ARP. Ознакомьтесь с: http://blog.deploymentengineering.com/2006/10/multiple-instance-msis-and.html и http://blog.deploymentengineering.com/2008/03/installshield-2009-beta-part-i .html –
Я написал, что много лет назад и совсем недавно был рабочий пример, написанный на C# с использованием Microsoft.Deployment.WindowsInstaller. C# отлично подходит для меня, потому что я только Server 2008 R2 на моей дневной работе. Я не уверен, какая поддержка Burn для обслуживания нескольких экземпляров в WiX 3.6. –