Я работаю над установщиком, который, как предполагается, устанавливает несколько служб Windows. Мы делаем новые сборки (с новыми .msi файлами) довольно часто, и мы используем значительные обновления, чтобы помочь установить по предыдущей установке.
Проблема состоит в том, что мы должны обновить сервисные файлы, не перезаписывая сервисную конфигурацию (считайте имя пользователя и пароль, например).
Мы используем ServiceInstall
и ServiceControl
в компоненте, который содержит сервис exe
файл. Есть ли способ сделать выполнение ServiceInstall
условное выражение (использование условия как REMOVE="ALL" AND NOT UPGRADINGPRODUCTCODE
) таким образом, сервис не удаляется при обновлении (просто остановился так, мы можем обновить файлы)?
Одно решение состояло бы в том, чтобы использовать пользовательские действия, но возможно существует лучший путь?
Спасибо!
Похоже, я искал не в том месте. Решение моей проблемы - добавить NOT UPGRADINGPRODUCTCODE
к стандартному действию DeleteServices
.
Это решает мою проблему. Предостережение этого подхода заключается в том, что все службы, установленные текущим файлом msi
, удаляются (или нет). Поэтому я не могу выборочно удалять / сохранять службы при обновлении. Однако это меня устраивает - мое требование хранить информацию о входе в систему (но не фактический код службы) при обновлении выполнено.
ОБНОВЛЕНИЕ: условие для DeleteServices
доступно из WiX в элементе InstallExecuteSequence
.
WiX будет обновлять компоненты только в том случае, если их версия более новая. Он проверяет только одно из полей (версия файла версии сборки, я не могу вспомнить), поэтому вы можете сохранить информацию о текущей версии в одном и сохранить ее статической в другом. Возможно, это у вас подойдет ...