2017-02-01 7 views
0

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

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

  • UpCo = Upgrade Код
  • PRCO = Код товара
  • Paco = Код пакета

enter image description here

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

Слишком сложно определить этот сценарий. Я думал о проверке измененного кода пакета. По следующей ссылке этот сценарий определяется как 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.
+0

Можем ли мы спросить, как вы решили решить эту проблему? Если продукты не отличаются по размеру, один из них - объединить их с одним установщиком и использовать любые лицензионные ключи приложения для «разблокировки» профильных функций после установки. Вы также можете добавить отдельную функцию, которая добавляется к базовой установке, если введена лицензия pro версии. –

ответ

1

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

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

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

Спасибо за ответ. Поэтому я могу использовать MsiGetProductInfo для получения кода пакета с помощью INSTALLPROPERTY_PACKAGECODE.Но я не знаю, как получить код продукта предыдущей установленной версии. Когда я использую свойство UpgradeTable, оно работает только для крупного обновления. В противном случае он пуст. –

+1

Почему вас интересует PackageCode? Он должен быть другим для каждого нового MSI, который вы создаете, это обновление, обновление, исправление и т. Д. – PhilDW

+0

Вы правы. Код пакета всегда отличается. Поэтому мне просто нужно проверить тот же код продукта. Но как мне получить Код продукта. Как я уже писал ранее, таблица обновления пуста, когда установлен MyApp BASIC версии 2 и я запускаю программу установки MyApp PRO версии 2. –