Перезапуск службы Windows во время обновления WIX
У нас есть служба Windows, установленная как часть нашего установщика msi WIX. Во время обновления мы пытаемся просто перезапустить сервис вместо полной переустановки, чтобы надежно защитить кредиты пользователей сервиса.
Обсуждается много постов на этот счет, но ничто не является окончательным.
Попробовал отключить DeleteServices во время обновления, выполнив следующие действия:
<InstallExecuteSequence>
<DeleteServices>NOT UPGRADINGPRODUCTCODE</DeleteServices>
</InstallExecuteSequence>
Примечание: приведенный выше код также присутствует в старом MSI
Но все еще видел, что сервис фактически удалялся и переустанавливался. Попытка отключения службы установки во время обновления, как показано ниже
<InstallServices>NOT WIX_UPGRADE_DETECTED</InstallServices>
Но служба находится в остановленном состоянии, и программа установки не работает, ExecServiceConfig с кодом 1603, поскольку служба не находится в рабочем состоянии.
Любые указатели на это будут полезны
1 ответ
Некоторое время назад я написал ответ для чего-то похожего (я думаю): Wix: Служба Windows иногда удаляется при обновлении. Пожалуйста, прочитайте эту ссылку для нескольких различных предложений.
Незначительное обновление. В дополнение к опциям в связанном ответе вы также можете использовать незначительное обновление - если это вообще приемлемый вариант. При незначительном обновлении продукт не удаляется, а затем переустанавливается, а обновляется "на месте". Для того, чтобы небольшие обновления работали, вам нужно следовать буквально правилам компонента, что может быть трудно сделать, но вы можете выполнить обновление без потери сервисных кредитов. Смотрите ниже здесь, как применяется незначительное обновление. И я просто сошлюсь на ответ с небольшим количеством информации о позднем REP.
Постоянный компонент: как указано в приведенном выше связанном ответе, вы можете установить постоянный компонент с параметрами конфигурации службы. В этом случае он никогда не будет удален во время обновления, но также и во время реального удаления. Соответственно, вы должны вручную очистить установку службы и установку файлов при "реальном" удалении (в отличие от значительного удаления, инициированного обновлением, которое устанавливает UPGRADINGPRODUCTCODE
). Вроде простой подход, который мне не очень нравится.
(Управляемые) учетные записи служб: не то, что я использовал, а более новую концепцию управляемых учетных записей служб, как описано в приведенном выше связанном ответе, можно исследовать? Шаг за шагом
Поздний REP / Сервис MSI: планирование RemoveExistingProducts
правильно поздно означает, что ваш сервис не должен быть удален во время сценариев обновления (подробности см. в связанном ответе). Может быть трудно следовать всем правилам компонентов буквально, но вы можете упростить это, поместив свой сервис в свой собственный, минимальный сервис установки MSI, а затем установив его с помощью пакета WiX Burn (последовательная установка файлов MSI).
Как уже было сказано несколько раз, прочитайте, пожалуйста, аналогичный ответ: Wix: Служба Windows иногда удаляется при обновлении.