Как обнаружить изменение кода пакета при обновлении (Small Update)

У меня есть продукт под названием MyApp. Этот продукт поставляется с различными версиями, такими как BASIC и PRO. Обе редакции имеют свой собственный установщик с одинаковой версией.

После того, как я установил версию BASIC и запустил установщик PRO, я хочу, чтобы InstallShield обнаружил это. Общее созвездие показано на следующем рисунке.

  • UpCo = код обновления
  • PrCo = код продукта
  • PaCo = код пакета

введите описание изображения здесь

Черные стрелки обрабатываются как Major Upgrades без проблем. Красные стрелки иллюстрируют проблему.

Слишком детально обнаружив этот сценарий, я подумал о проверке измененного кода пакета. По следующей ссылке этот сценарий определяется как Small Update.

http://helpnet.flexerasoftware.com/isxhelp22/isxhelp22.htm#CSHID=helplibrary%2FUpgradeConsiderations.htm|StartTopic=helplibrary%2FUpgradeConsiderations.htm

  1. Есть ли такое свойство, как IS_MINOR_UPGRADE или IS_MAJOR_UPGRADE, которое я могу использовать?
  2. Можно ли узнать код пакета, код продукта и код обновления предыдущей и текущей установки? Затем я мог бы сравнить эти значения и ответить на этот сценарий в InstallScript.

1 ответ

Если в этом сценарии не установлено значение IS_MINOR_UPGRADE, такого свойства не существует. Возможно, вы сможете написать настраиваемое действие, которое проверяет текущую записанную информацию об установленном пакете (см. MsiGetProductInfo), но вы можете быстро столкнуться с ограничениями API-интерфейсов установщика Windo ws, которые вы можете вызывать внутри настраиваемого действия.

Предполагая, что между вашими изданиями есть разные файлы (то есть разные имена, а не только разные сборки одного и того же имени файла), я думаю, у вас возникнут проблемы с перемещением "влево" и "вправо". Это может привести к потере компонентов на машине, если будет выполнено хотя бы одно из направлений. Я бы предложил использовать один из этих альтернативных подходов:

  • Используйте разные коды продуктов и, возможно, также разные коды обновлений (вы можете добавить несколько основных обновлений, чтобы использовать стратегию, аналогичную ISPreventDowngrade, чтобы предотвратить параллельные установки)
  • Рефакторинг для меньших MSI (например, один для общих файлов и один для различных файлов для каждого издания; последний может быть взаимоисключающим, как в предыдущем пункте), возможно, распространяемый проектом Suite/Advanced UI, или
  • Используйте не-установщик лицензирования для обеспечения соблюдения ваших выпусков
Другие вопросы по тегам