InstallShield - 如何构建升级安装程序

InstallShield - 如何构建升级安装程序

语境

我目前的任务是构建我们软件安装程序的下一个版本。

我拥有以前版本(v16)的所有项目文件,目前正在构建 v17。

我们正在使用 InstallShield 2015 专业版(版本 22 | Service Pack 2)

问题

我在这里有基本的 MSI 项目文件,我已经更改了版本号并对我们软件的下一个版本进行了必要的更改 - 但是,当我运行安装程序时,它说我已经安装了它(即使版本号不同)

在研究这个问题时,有很多关于这个问题的帖子,但我找不到明确的答案,不知道应该更改“产品代码”还是“升级代码”,或者两个代码都更改,或者两个代码都不更改,或者其他我遗漏的东西。

任何帮助将不胜感激。

答案1

这取决于你如何设计你的软件。你能同时运行多个版本吗?只能运行一个版本吗?

查看Microsoft 有关 Productcode 的文章升级代码

如果更新时出现以下任一情况,则必须更改产品代码:

  • 必须能够在同一系统上共存安装原始产品和更新产品。
  • .msi 文件的名称已更改。
  • 现有组件的组件代码已发生改变。
  • 一个组件被从现有特征中删除。
  • 现有特征已成为现有特征的子特征。
  • 现有子特征已从其父特征中移除。

对于升级代码,给出了以下示例。

以下两个场景说明了UpgradeCode的使用。

  • 产品 A 和产品 B 附带相同的 ProductLanguage、ProductVersion 和 UpgradeCode。产品 A 和产品 B 具有不同的 ProductCode。由于产品被分配了相同的 UpgradeCode,因此无法编写升级表来区分产品 A 的旧版本和产品 B 的旧版本。在这种情况下,您将无法进行忽略产品 B 的产品 A 升级安装。由于它们是不同的产品,因此应该为它们分配不同的 UpgradeCode。
  • 产品 A 的英语版和法语版附带相同的 ProductVersion 和 UpgradeCode。产品 A 的英语版和法语版均具有不同的 ProductLanguages 和 ProductCode。尽管英语版和法语版共享相同的 UpgradeCode,但可以编写 Upgrade 表,以便只检测和升级较旧的英语版本,而忽略较旧的法语版本。产品的不同语言版本可以使用相同的 UpgradeCode。

相关内容