Основные проблемы обновления и установки Wix - PullRequest
3 голосов
/ 07 января 2012

У меня есть проект Wix, который я настроил для крупных обновлений. Я использую WixUI_Advanced для выбора между установками для отдельных пользователей и компьютеров. Когда я устанавливаю и обновляю для каждого пользователя все, как и ожидалось, программа установки распознает обновление, и в разделе «Программы и компоненты» есть только одна запись. Однако, когда я выбираю установку для каждой машины, он начинает дублировать записи в программах и компонентах (даже если установка и обновление выполняются для каждой машины и в одну и ту же папку).

Глядя на файл журнала установки, кажется, что FindRelatedProducts выполняется до того, как пользователь получит возможность выбрать установку для каждой машины, поэтому установщик считает, что контекст изменился, и не будет выполнять обновление. Я пытался подавить FindRelatedProducts в InstallUISequence, но когда я это сделал, установщик все равно пропускает FindRelatedProducts в InstallExecuteSequence.

Какие у меня варианты на данный момент?

Ответы [ 2 ]

1 голос
/ 07 января 2012

Вы можете вручную выполнить действие FindRelatedProducts после выбора контекста установки.Используйте метод MsiDoAction .Я использовал этот подход один раз, и он, похоже, сработал.

0 голосов
/ 22 июня 2018

Лучше было бы запустить собственное пользовательское действие до FindRelatedProducts, которое будет искать предыдущую версию уже установленного продукта. Это пользовательское действие должно установить для ALLUSERS либо 1, либо значение Nothing в зависимости от области действия предыдущей версии, чтобы FindRelatedProducts обнаружил его и запланировал его обновление. Тогда хорошей идеей будет запретить выбор области действия для каждого пользователя, если предыдущая версия была установлена ​​для каждого компьютера, иначе у установщика может быть недостаточно прав для обновления предыдущей установки для каждого компьютера.

Похоже, именно такой подход использует InstallShield. Если вы создадите пустой тестовый пакет MSI с помощью бесплатной InstallShield Limited Edition, а затем декомпилируете его с Dark, вы увидите, что это настраиваемое действие называется IsSetAllUsers и находится в SetAllUsers.dll.

...