Major Upgrade Downgrade : Чтобы перезаписать двоичные файлы с более высокими номерами версий при крупных обновлениях, есть несколько вариантов.
- Предпочтительным подходом будет использование сопутствующего файла (сторонние файлы).
- Или, если вы можете: скомпилировать новый двоичный файл с более высоким номером версии (для ваших собственных файлов).
REINSTALLMODE : можно использовать свойство MSI REINSTALLMODE - но оно имеет ряд побочных эффектов:
Настройка 1 : Версия 1.0.0
для настройки:
msiexec.exe /i Setup1.msi /qn
Настройка 2 : Версия 2.0.0
для настройки основного обновления:
msiexec.exe /i Setup2.msi REINSTALLMODE=amus /qn
Несколько проблем : Есть несколько проблем с REINSTALLMODE, которые делают его небезопасной функцией (попробуйте вместо этого emus
? См. Документацию - возможно, чуть менее грубая сила). Жаль, что этот параметр применяется ко всем функциям в настройке, что делает его очень опасным:
- может понизить общедоступные файлы для всей системы (например, если есть модули слияния)
- может привести к несовместимому состоянию версий, так как старый пакет может быть установлен после более нового и понижать версию только некоторых общих файлов.
- может понижать или уничтожать параметры в файлах без версий (и параметры реестра). )
- может привести к значительному увеличению числа запрошенных перезагрузок из-за попыток ненужной замены используемых файлов той же версии.
- есть еще несколько проблем, которые вполне конкретны c
Сопутствующие файлы . Ниже приведен фрагмент использования сопутствующих файлов в WiX:
<..>
<Component Id="MyFile.exe" Feature="Main">
<File Id="MyFile.exe" Source="MyFile.exe"></File>
</Component>
<Component Id="MyFile_2.exe" Guid="{0EBDFD64-017B-428F-BB67-3D82EA2A99AF}" Feature="Main">
<File Source="MyFile_2.exe" CompanionFile="MyFile.exe"></File>
</Component>
<..>
Краткое описание в одну строку : во втором компоненте мы указываем на файл первого компонента, так что MyFile_2.exe
установит всякий раз, когда MyFile.exe
установлен - независимо от проблем с версиями.
Взлом двоичной версии : уродливо, но эффективный вариант - изменить версию двоичного файла, используя Visual Studio, чтобы установить более высокий номер версии. Побочных эффектов несколько:
- вы нарушаете цифровые подписи
- вы можете создать «путаницу версий»
- существуют риски, связанные с написанием нового двоичного файла из Visual Studio
- вам нужно продолжать делать это для новых версий
- et c ...
Move, Rename : Если вы можете отсоединить новый файл от старого, переименовав его или переместив, вы можете обойти проблему. Если вы снова получите новую версию на будущее, возможно, вам придется сделать это снова. Неуклюжий.
«Загрузить из» : Поместить файл в общий доступ и загрузить его из указанного c расположения и удалить старую копию из папки установки. Может ли это работать? Это означает, что файл также может быть доставлен другой установкой в этом месте.
Версия Lying : в Installshield существует концепция возможности установки конкретный c номер версии файла. Я не уверен, как реализовать это в WiX. Существует также «опция всегда перезаписи» , которая, очевидно, устанавливает максимальное значение для версии, поэтому существующий файл всегда перезаписывается.
Некоторые ссылки :