Могу ли я использовать WiX для создания MSI, единственной целью которого является удаление программного обеспечения?
-
09-10-2019 - |
Вопрос
Я поставил версию 1.0 своего программного обеспечения с помощью сгенерированного на WiX установщика, и теперь я хочу поставить / распространить версию 1.1.Если возможно, я хотел бы избежать ситуации, когда людям нужно сначала вручную удалить 1.0, прежде чем устанавливать 1.1.
Тем не менее, мне пришлось изменить InstallScope
, меняя его с perUser
Для perMachine
по разным техническим причинам.Ничего особенного, за исключением того, что это усложняет процесс обновления.
То, что я вижу, происходит, это то же самое, что этот пост упоминания, в которых, несмотря на то, что вы выполнили все необходимые правильная работа чтобы реализовать обновление, по завершении вы увидите две разные записи в списке установленных программ, одна из которых 1.0, а другая 1.1.И это вызывает проблемы в программном обеспечении.
Таким образом, может показаться, что базовая логика "удалить предыдущую версию" здесь не работает, поэтому мне нужен какой-то другой метод удаления предыдущей версии.Я попытался пойти по пути отстрела надлежащего msiexec /x
команда удалить предыдущую версию с помощью ShellExecute CustomAction
, но если я чего-то не упускаю, то в последовательности нет места, где это сработало бы, потому что вы запускаете один из них msiexec
команда в середине очередного запуска.
Потом я наткнулся на эта страница в котором подробно описывается малодокументированный метод "объединения" MSI воедино:
setupbld.exe -out $(TargetDir)setup.exe -msu FirstInstaller.msi -msu SecondInstaller.msi -setup $(ProjectDir)setup.exe
Звучит заманчиво - все, что мне сейчас нужно, это какой-нибудь MSI, единственной функцией которого является удаление версии 1.0, а затем я могу соединить ее со старой.
За исключением того, что я не нахожу много документации о том, как вы могли бы это сделать.Фактически, поскольку теоретически это может быть использовано для удаления программного обеспечения, которое вы изначально не устанавливали, я не уверен, что это вообще технически возможно по соображениям безопасности.
Кто-нибудь знает, как создать MSI с помощью WiX, единственной целью которого является удаление программного обеспечения?Или я совершенно неправильно подхожу к этой проблеме?
Решение
Используйте этот Wix для удаления предыдущей версии как части вашей версии 1.1.Я не уверен, зачем вам нужно объединять MSIS в цепочку.
Как реализовать обновление установщика WiX?
Редактировать:Я пропустил изменение в требовании к InstallScope.Итак, что действительно необходимо, так это загрузчик.
Я опубликовал, как создать загрузчик здесь: Мне нужен проект начальной загрузки WIX, который устанавливает МОЕ программное обеспечение и необходимые компоненты
Другие советы
Решением является использование пользовательского действия, которое запускает команду "msiexec.exe / x".Убедитесь, что это запланировано после Установка завершается в InstallExecuteSequence.Кроме того, это Возврат должно быть Асинхронный запуск (асинхронное выполнение, не ждите возврата).
С этими настройками удаление использует другой асинхронный процесс, что позволяет избежать конфликта.