Ответ 1
EDIT: похоже, это объяснение одной и той же проблемы или по той же теме, по крайней мере, может быть проще понять: Msiexec: автоматический откат к предыдущей версии при сбое установки
Вы столкнулись с несколькими проблемами использования MSI здесь.
- Версии файлов: во время установки режим перезаписи по умолчанию (определенный свойство REINSTALLMODE) не будет замените файлы, которые по умолчанию равны. Это можно изменить, установив REINSTALLMODE = "emus". Это заменит файлы с одинаковой версией для версий файлов. Неверсифицированные файлы будут сохранены, если изменения и создание дат будут разными.
- Модифицировать поведение: как говорит Крис, файлы, которые, как представляется, возвращаются к умолчанию, фактически удаляются и переустанавливаются из-за большой конфигурации обновления. Сохранение файлов возможно только при крупных обновлениях, если RemoveExistingProducts помещается в конце InstallExecuteSequence. Затем разделяемые файлы между релизами никогда не удаляются, а правила перезаписи файлов, описанные в пункте 1, применяются для перезаписи.
- Сохранение конфигурации службы: исключение повторной записи информации учетных данных службы является распространенной проблемой для основных обновлений, которые удаляются на ранней стадии InstallExecuteSequence. Другими словами, продукт удаляется, а затем переустанавливается, удаляя измененные файлы. Я не рекомендую это, но некоторые люди спорят об этом решении: Как остановить и не удалять службы Windows при основном обновлении в wix? ( Rob Mensching - автор WIX и Orca - я думаю, что он предлагает это решение в качестве опции, а не обязательно рекомендацию. Пожалуйста, задайте в связанном сообщении, чтобы быть уверенным). При правильной установке и удалении компонентов, размещенных в конце InstallExecuteSequence, эту проблему обычно вообще избегают, и это предпочтительный подход (нормальный компонент, ссылающийся на предотвращение удаления компонента, полностью оставляя параметры службы и измененные файлы конфигурации неповрежденными - если и только если, ссылка на верна - см. описание этой концепции ниже). Однако мой предпочтительный подход по-прежнему должен использовать отдельный MSI для установки и настройки службы, если вы используете учетную запись пользователя для запуска службы - тогда это автономный блок развертывания и может быть включен в bootstrapper и обновляется самостоятельно, и лучше всего: он невозможен никакими другими изменениями приложения или исправлениями. Наконец, я хотел бы указать, что служба, работающая с учетной записью пользователя, не рекомендуется для начала - для целей безопасности и развертывания.
Ссылка на компоненты: относится к идентификаторам GUID, назначенным компонентам MSI, и о том, как они должны соответствовать одному и только одному (абсолютному) пути на всех этапах обновления. См. Лучшее обсуждение этого с помощью нескольких примеров здесь: Измените мой GUID-компонент в wix?
Я не упоминал о возможности установки компонентов MSI, устанавливающих службы на постоянный, чтобы предотвратить их удаление при удалении по той простой причине, что это совсем не хорошая практика. Затем файлы и регистрация останутся при окончательной деинсталляции, и вам потребуется специальное действие для очистки. Очень плохая практика и связана с большим количеством дополнительной работы и проблем с оборванными ссылками на компоненты.