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

StackOverflow https://stackoverflow.com/questions/994571

Вопрос

Мы разработали проект с использованием проекта InstallScript MSI в Installshield 2008 Premier Edition.В проекте мы добавили условие, чтобы старая версия не устанавливалась на Higher.

Проблема, с которой мы столкнулись, заключается в том, что рассмотрим новый проект, в котором версия продукта будет 1.0.0925.1, и добавлено условие, чтобы избежать более высокой версии по сравнению с более низкой.Чтобы добавить это условие, я получил его по ссылке выше;наряду с этим на вкладке «Общие» основного обновления я ВКЛЮЧИЛ запрос на обновление;поскольку в будущем новая установка будет иметь версию 1.0.0925.2, она должна запросить обновление.

Теперь я создам новую настройку с версией продукта 1.0.0925.2 и на вкладке «Общее» основного обновления я отключу это приглашение, потому что;если пользователь попытается установить версию 1.0.0925.1 поверх версии 1.0.0925.2, это не должно разрешиться;в этом случае все работает нормально;появляется сообщение: «Другая версия этого продукта уже установлена.Установка этой версии не может быть продолжена.Чтобы настроить или удалить существующую версию этого продукта, используйте «Установку и удаление программ» на панели управления.{2D0E6C46-1CC2-4174-8AAC-0B39312D8ECE}"

Теперь, через несколько дней, произойдут изменения, и снова будет создана другая установка с версией 1.0.0925.3, в которой запрос на обновление будет отключен.Теперь я пытаюсь установить 1.0.0925.3 поверх 1.0.0925.2, очевидно, он должен получить обновление;но здесь возникает проблема: вместо вопроса «Программа установки выполнит обновление» появляется сообщение «Другая версия этого продукта уже установлена».Установка этой версии не может быть продолжена.Чтобы настроить или удалить существующую версию этого продукта, используйте «Установку и удаление программ» на панели управления.{2D0E6C46-1CC2-4174-8AAC-0B39312D8ECE} «То есть он не позволяет обновлять, поскольку я отключил подсказку 1.0.0925.2.Если я включу это, то любая установка будет выполняться каждый раз, когда будет запрашиваться обновление, либо на более низкую версию, либо на более высокую версию, или на более высокую версию, чем на более низкую версию.

Даже я думал о проверке версии продукта в Installscript, но я не знаю, как подойти хотя бы к тому, как, если бы мне удалось получить версию продукта уже установленной установки, а также текущую запущенную установку.но как изменить приглашение на обновление во время выполнения, поскольку оно задается во время разработки.

Это было полезно?

Решение

Хорошо, если вы используете установщик Windows, вам нужно переосмыслить номера версий.Установщик Windows распознает только майор.минор.билд для установочных пакетов (однако файлы можно использовать основная.второстепенная.сборка.ревизия, только не сам установщик)

Таким образом, с точки зрения установщика Windows, 1.0.0925.1 и 1.0.0925.2 на самом деле являются 1.0.0925. Если у них одинаковый код продукта, вы получите стандартное сообщение «Другая версия этого продукта уже установлена». диалог.

По сути, если вы хотите поддерживать обновления, измените номер версии major.minor.build.Мы используем четвертое поле «Редакция» для внутреннего использования для идентификации установщиков бета-версии, но установка новой версии требует удаления предыдущей.Обновления поддерживаются только для общедоступных выпусков, в которых мы меняем одно из первых трех полей и соответствующим образом настраиваем обновление.

Другие советы

Я думаю, проблема, с которой вы столкнулись, заключается в том, что вы не меняете ProductCode.Сначала вы должны решить, хотите ли вы выполнить большое или незначительное обновление.Похоже, вы остановились на важном обновлении.Поэтому вам необходимо создать новый ProductCode, либо с помощью Direct Editor и изменив таблицу обновлений, либо создав новый «Основной элемент обновления» в разделе «Обновления» интегрированной среды разработки InstallShield.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top