【问题标题】:Installshield major upgrade doesn't uninstall old versionInstallshield主要升级不卸载旧版本
【发布时间】:2017-12-31 13:46:09
【问题描述】:

我有一个 Installshield 项目。

我添加了一个主要的升级项目并更改了Product versionProduct codePackage code

使用新安装程序安装后,旧版本仍然存在(Add / Remove

我认为这与我的旧版本号是 1.0.4.23 而新版本号是 1.0.4.24 的事实有关 - 这是一个问题吗?大升级会忽略版本属性的这么小的变化吗?

在主要升级common标签我选择Any earlier version

我记得几年前用版本号 1.11.2 做这件事,一切都很好,这是我怀疑当前问题与版本号有关的主要原因。

【问题讨论】:

    标签: windows-installer version installshield


    【解决方案1】:

    我认为这与我的旧版本号是 1.0.4.23 和新的 1.0.4.24 - 这是一个问题吗?大升级会忽略版本这么小的变化吗?

    是的,只有版本号的前三个字段对重大升级很重要。第四个字段被简单地忽略。

    这在Major Upgrades MSDN page 的注释中有所说明。

    如果您想触发重大升级,您的新版本号必须为1.0.5.0 或更高版本。


    编辑:

    正如 Christopher Painter 指出的那样:

    如果您必须使用所有四个字段,则有一种解决方法。你可以 创建一个自定义操作来执行您自己的实现 FindRelatedProducts 并使用 ProductCode 设置 action 属性 然后 RemoveExistingProducts 对其进行操作。

    自定义操作可以这样实现:

    1. 致电MsiGetProperty 获取您产品的UpgradeCode
    2. 致电MsiEnumRelatedProducts() 枚举与您的产品具有相同UpgradeCode 的所有产品。
    3. 致电MsiQueryProductState() 验证MsiEnumRelatedProducts() 返回的产品是否已实际安装。我遇到过一些情况,MsiEnumRelatedProducts() 返回了不再安装的孤立产品。因此,通过使用MsiQueryProductState() 仔细检查安装状态,代码将更加健壮。
    4. 调用MsiGetProductInfo(),以INSTALLPROPERTY_VERSIONSTRING作为szProperty参数的参数,查询已安装产品的版本。不要使用INSTALLPROPERTY_VERSION,因为INSTALLPROPERTY_VERSION只派生自版本号的前三个字段,这是我们要避免的问题。
    5. 比较版本号时,请确保不只是比较字符串,而是比较parse the strings into the fields that are separated by '.' and compare the fields individually
    6. 如果您找到要替换的匹配产品,请致电MsiSetProperty()ActionProperty 设置为该产品的ProductCodeRemoveExistingProducts 然后会对其进行操作。

    【讨论】:

    • 感谢您在回答中提供参考。
    • 如果您必须使用所有四个字段,有一种解决方法。您可以创建一个自定义操作来执行您自己的 FindRelatedProducts 实现,并使用 RemoveExistingProducts 然后对其执行的 ProductCode 设置操作属性。
    • @ChristopherPainter 我已经添加了可能实现此类自定义操作的步骤。
    • 酷。只是一个设计提示......您可以通过查询升级表来编写数据。您还可以添加自定义列来设置标志以仅处理某些行。对于每一行,如果有标志,获取操作属性,查询 MSI,附加操作属性。这是我希望 InstallShield 在大约 15 年前所做的事情。 ;)
    • 确实充满异国情调:-)。
    猜你喜欢
    • 1970-01-01
    • 2018-05-27
    • 2018-09-29
    • 2011-07-04
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多