WIX не удаляет старую версию - PullRequest
1 голос
/ 11 июля 2019

После некоторого поиска в Google я придумал конфигурацию, которая позволила бы мне устанавливать только более новые версии моего пакета (что он делает) при замене старых, уже установленных версий (которые он не делает)

Мой файл wxs выглядит следующим образом:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="*"
             Name="Gdml File Viewer" Language="1033"
             UpgradeCode="5fb07c15-32a5-4b8a-9794-e4425bfc2eea"
             ...>
        <Package InstallerVersion="200"
                 Compressed="yes"
                 InstallScope="perMachine" Platform="x64" />
        <MajorUpgrade Schedule="afterInstallValidate"
                      DowngradeErrorMessage="A later version of [ProductName] is already installed"
                 AllowSameVersionUpgrades="no"
                 AllowDowngrades="no" />
...

Как и ожидалось, это позволяет мне устанавливать более новые версии, но более старая версия не удаляется. Он по-прежнему отображается в списке «Приложения и функции»:

Apps & features

(другой экземпляр имеет версию 2019.14.181.35181)

1 Ответ

2 голосов
/ 11 июля 2019

Не удалось выполнить крупное обновление : при появлении двух записей в окне «Установка и удаление программ» основное обновление завершилось неудачно (как правило).

  • Config : необходимо исправить конфигурацию таблицы обновлений .Минимальная разметка WiX для таблицы обновления по умолчанию - с обычными параметрами (которые выглядят хорошо, см. Скриншот ниже) - всего лишь:

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    
  • Dangling Version: также возможно, что с вашей разметкой WiX все в порядке, и у вас есть свисающая более старая версия, которая никогда не была правильно настроена, если это так, удалите ее вручную и попробуйте снова или попробуйте на чистом виртуальном.

  • Контекст установки : файлы MSI можно устанавливать для каждого пользователя или для каждого компьютера.Если у вас есть установка для пользователя, а затем запустите установку для компьютера, она не обнаружит предыдущую версию.У вас есть какие-либо жестко запрограммированные ссылки на ALLUSERS в вашей упаковке?

  • ProductVersion : Возможно, не было ни одного повышения илибольше первых 3 цифр в версии продукта (четвертое поле игнорируется).

Дополнительные сведения : некоторые дополнительные сведения, которые следует запомнить:

  • ОсновныеОбновление - это, по сути, удаление старой версии и установка новой версии с рядом параметров планирования для порядка, в котором выполняются действия (сначала установите новую, а затем удалите старую или наоборот).

  • Как указывалось выше, у вас также может быть испорченная старая версия установки на коробке, которая не была должным образом сконфигурирована, или произошла какая-то ерунда X-Files, которая предупреждает об отказе при обновлении.Бывает.

Кривая обучения WiX : Предложите использовать некоторые образцы, чтобы ускорить процесс обучения.Единственное, что действительно помогает? Вот несколько советов по быстрому запуску WiX .Там есть образцы ссылок.

Минимальный образец WiX : есть этот старый образец: Прозрачный алюминий .По сути, пошаговое руководство по использованию Votive для создания установщика на основе WiX.Включает основной элемент обновления.Я считаю, что эта простая конфигурация добавляет защиту от понижения, к которому вы стремитесь:

<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />

См. Таблицу обновлений , которая дает:

Orca

Контрольный пример : Используя прозрачный алюминий в качестве тестового проекта, вы можете попробовать эту процедуру, чтобы заставить работать обновление:

  1. Установите код продукта на *, чтобы автоматически создавать новый код продукта для каждой сборки ("<Product Id="*" ...").
  2. Скомпилируйте первую версиюВаш MSI. Щелкните правой кнопкой мыши проект WiX в представлении решения в Visual Studio и выберите Open Folder in File Explorer. В bin и Debug или Release.
  3. Переименуйте скомпилированный MSI, добавив _1 в конец имени файла. Например: MySetup_1.msi
  4. Теперь поднимите одиниз первых 3 цифр поля версии продукта в источнике WiX: <Product Id="*" ... Version="2.0.0"
  5. Скомпилируйте новый MSI и переименуйте его: MySetup_2.msi
  6. УстановитеMSI-файлы, начиная с версии 1, а затем второй.Убедитесь, что основное обновление выполнено успешно.

Advanced : здесь приведена демонстрация усовершенствованного способа настройки основных обновлений с использованием комбинации вспомогательного элемента "MajorUpgrade" и более старые "Upgrade" элементы (которые позволяют более детально контролировать итоговую таблицу обновлений):

Добавление записейв MSI UpgradeTable для удаления связанных продуктов

А вот пример использования только более старых элементов Upgrade, что приводит к большей работе, но полный контроль над таблицей Upgrade: Major Upgrade -«Старый, ручной путь» .


Ссылки :

...