У меня проблема с установщиком, созданным с помощью Wix 3.7. У меня есть продукт, в котором устанавливается служба Windows. Проблема в том, что во время обновления продукта (с версии 1.1 до версии 1.2, тот же UpgradeCode, разные свойства ProductCode Guid и MajorUpgrade) я хочу заменить исполняемый файл, запущенный Службой. Файл используется старым процессом (например, службой Windows). Я подозреваю, что установщик 1.1 используется для удаления продукта 1.1, и в этом установщике ServiceControl был недопустимым (т.е. не был настроен на остановку при удалении).
Мое предположение:
- 1.2 установщик обнаруживает существующий продукт (из-за кода обновления)
- удалить старый продукт
- служба не остановлена / не удалена из-за ошибки в установщике 1.1
- 1.2 пытается заменить исполняемый файл, но процесс все еще выполняет исполняемый файл.
Обратите внимание, что я настроил установщик 1.1 с помощью Orca, чтобы получить правильный ServiceControl, который останавливает и удаляет службу при удалении. Мы называем это 1.1tweaked. Если я устанавливаю продукт с помощью 1.1tweaked, а затем использую программу установки 1.2, все работает должным образом.
Я уже пробовал любую возможную конфигурацию ServiceControl в установщике 1.2, но это бесполезно, если описанные выше шаги верны.
Как я могу принудительно остановить "текущую" службу Windows в установщике 1.2? Похоже, мне нужно настраиваемое действие. Любые идеи? Спасибо
RemoveExistingProducts
? Это может сработать, если вы запланируете этоafterInstallExecute
, поскольку установщик 1.1 больше не будет пытаться удалить службу из-за подсчета ссылок на компоненты, если ваша установка 1.1 соответствовала предлагаемым правилам для компонентов. - person Brian Sutherland   schedule 25.01.2017<RemoveExistingProducts After="InstallExecute"/>
в<InstallExecuteSequence>
? - person peval27   schedule 25.01.2017Schedule="afterInstallExecute"
вMajorUpgrade
- person peval27   schedule 25.01.2017