如何在更新时检测包代码的更改(小更新)

时间:2017-02-01 09:38:00

标签: windows-installer installshield installscript

我有一个名为MyApp的产品。 该产品附带不同版本,如BASIC和PRO。两个版本都有自己的安装程序,版本相同。

当我安装BASIC版本并运行PRO安装程序时,我希望InstallShield检测到这一点。整个星座图如下图所示。

  • UpCo =升级代码
  • PrCo =产品代码
  • PaCo =包裹代码

enter image description here

黑色箭头作为主要升级处理没有问题。 红色箭头说明了这个问题。

为了检测这种情况,我考虑检查更改的包代码。通过以下链接,此方案被定义为小更新。

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 个答案:

答案 0 :(得分:1)

除非在此方案中设置了IS_MINOR_UPGRADE,否则没有此类属性。您可以编写一个自定义操作来检查当前记录的有关已安装软件包的信息(请参阅MsiGetProductInfo),但您可能会很快遇到允许在自定义操作中调用的Windows Installer API的限制

假设您的版本之间存在不同的文件(即,不同的名称,而不仅仅是同一文件名的不同版本),我认为您在移动这两个版本时都会遇到问题" left"和#34;对"。这样做可能是机器上至少有一个方向的孤立组件。我建议使用以下替代方法之一:

  • 使用不同的产品代码,也许还有不同的升级代码(您可以添加多个主要升级以对ISPreventDowngrade使用类似的策略,以防止并排安装)
  • 重构为较小的MSI(例如,一个用于共享文件,一个用于各种每个版本的文件;后者可能与上一个项目中的互斥)可能由Suite / Advanced UI项目分发,或
  • 使用非安装程序许可来强制执行您的版本