是什么导致 MSI 更新不更新安装程序中的组件?

Rob*_*ins 5 windows-installer installshield installshield-2010

(编辑:问题已更改。)

我有一个带有安装程序的产品,它是由 InstallShield 2010 构建的,所有帐户似乎都可以作为“新”安装进行安装。

我会定期更改安装内容,因为我使用错误修复等更新此或那个组件。在那些时候,我尝试更改已更新文件的元数据中的版本号,但有些组件是不可能的。当然,它们总是以最近的修改日期结束。我也在 MSI 数据中更改了产品的版本号。但是,我并没有每次都更改包代码。

当某些用户在我的产品已经存在的系统上运行安装程序时,他们会收到更新模式 UI(“您想要更新吗?”等)的提示,并且安装程序似乎已完成。但是,更新的文件在之后运行“修复”安装之前并不总是覆盖旧文件,特别是如果版本号没有改变,并且现在有证据表明使用“强制覆盖”标记组件的内容不会不要改变这种行为。

这里发生了什么?有什么办法可以得到更好的结果吗?每当我更新产品或更新组件时,包装代码是否需要更改?(编辑:每次我构建版本时,包代码都会改变,所以这不是问题的原因。)

编辑:这是一个更新用户界面,但更新后的维护实际上完成了所需的安装。

Chr*_*ter 3

您当然应该在每次构建时更改 PackageCode。事实上,默认情况下,InstallShield 有一个构建设置可以执行此操作。

事实上,MSDN 帮助主题Package Codes说:

不同的 .msi 文件不应具有相同的包代码。更改软件包代码非常重要,因为它是安装程序用来搜索和验证给定安装的正确软件包的主要标识符。如果在未更改包代码的情况下更改了包,并且安装程序仍可以访问这两个包,则安装程序可能不会使用较新的包。

这就是您获得维护 UI 体验而不是升级体验的原因。

现在,一旦您开始这样做,您接下来必须考虑是否要支持次要升级、主要升级或补丁来为您的应用程序提供服务。在将安装程序投入生产之前,了解这一点并测试您的策略非常重要。

  • 如果有一个 InstallShield 设置,那么在使用 InstallShield 11 年之后,我还没有真正找到它(我使用 InstallScript 直到最新的主要版本。)您能否推荐一些学习此内容的资源,这些资源不像 MSDN 那样令人讨厌地不连贯文档? (2认同)