Запрет установки старого пакета в более новой версии

Пакеты обновления установщика Windows можно создать так, чтобы основные обновления не устанавливались, если у пользователя уже установлена более новая версия. Процедура, описанная в этом разделе, позволяет предотвратить только переходы на более раннюю версию, которые могут быть вызваны запуском основного пакета обновления. Эта процедура основана на действии FindRelatedProducts, которое выполняется только во время первой установки и не выполняется в режиме обслуживания (переустановки). Так как незначительные обновления выполняются с помощью переустановки, эту процедуру нельзя использовать для определения того, пытается ли дополнительный пакет обновления перейти на более раннюю версию приложения. Дополнительные сведения см. в статье Подготовка приложения для будущих крупных обновлений.

Предотвращение установки старого пакета в более новой версии

  1. Введите свойство UpgradeCode для группы связанных продуктов, которые могут иметь право на получение этого обновления, в столбец UpgradeCode таблицы обновления.

  2. Введите битовый флаг msidbUpgradeAttributesOnlyDetect в столбце Атрибуты таблицы обновления.

  3. Введите версию обновления, предоставляемую этим пакетом, в столбец VersionMin таблицы обновления. Оставьте столбец VersionMax пустым.

  4. Введите имя свойства, которое должно быть задано действием FindRelatedProducts, в столбец ActionProperty таблицы обновления.

  5. Добавьте свойство SecureCustomProperties и свойство с именем в столбце ActionProperty таблицы upgrade в таблицу свойств.

  6. Добавьте настраиваемый тип действия 19 после действия FindRelatedProducts в таблице InstallExecuteSequence. Включите запись в таблицу CustomAction для этого действия и введите текст, который будет отображаться в столбце Целевой объект. Настраиваемое действие типа 19 встроено в установщик, поэтому код для написания отсутствует.

  7. Введите имя ActionProperty в столбец Условие записи в таблице InstallExecuteSequence , содержащей тип настраиваемого действия 19. Это указывает, что настраиваемое действие должно выполняться только в том случае, если таблица обновления обнаруживает, что более новая версия уже установлена.

    Например, пакет установщика Windows, который обновляет группу связанных продуктов до версии 3.0, может содержать следующие записи в таблицах Upgrade, CustomAction, InstallExecuteSequence и Property . Все связанные продукты в группе имеют одинаковый код обновления, но установщик не устанавливает этот пакет обновления, если на компьютере уже установлена версия более поздней версии 3.0. В этом случае установщик выводит сообщение об ошибке, и установка завершается ошибкой. Пакет обновления версии 3.0 устанавливается в версиях 1.0 и 2.0.

    Обновление таблицы

    UpgradeCode VersionMin VersionMax Язык Атрибуты Удалить ActionProperty
    {E7BE6D45-49FF-4701-A17E-BDCC98CE180D} 3,0   msidbUpgradeAttributesOnlyDetect NEWPRODUCTFOUND
    {E7BE6D45-49FF-4701-A17E-BDCC98CE180D} 1,0 3,0 msidbUpgradeAttributesVersionMinInclusive UPGRADEFOUND

     

    Таблица CustomAction

    Действие Тип Источник Назначение
    CA1 19 Более высокое обновление уже установлено.

     

    InstallExecuteSequence Table

    Действие Условие Последовательность
    FindRelatedProducts 200
    CA1 NEWPRODUCTFOUND 201

     

    Таблица свойств

    Свойство Значение
    SecureCustomProperties NEWPRODUCTFOUND; UPGRADEFOUND