使用 installshield 和 msi 时版本号都有哪些限制

Posted

技术标签:

【中文标题】使用 installshield 和 msi 时版本号都有哪些限制【英文标题】:What are the constraints with regards to version numbers when using installshield and msi使用 installshield 和 msi 时版本号有哪些限制 【发布时间】:2014-11-27 05:28:58 【问题描述】:

由于内部原因,我们当前的版本设置为 901.0.1500.0,我们的项目是一个 C# .NET 项目,并使用 installShield 进行安装、补丁创建、升级等... 在我们的测试过程中,一切正常,但我们最近确实遇到了几篇文章(大部分是相当老的文章),其中指出 a.b.c.d 的版本号必须遵循 a 和 b 必须小于 255 的规则。 同样,我们在测试过程中没有遇到任何问题,但这让我们有点担心。

谁能帮忙解决这个问题?

非常感谢。

【问题讨论】:

【参考方案1】:

在 Windows 安装程序包中会遇到三种版本:

产品版本:存储在ProductVersion property中,由于它的压缩副本以DWORD形式存储在注册表中以支持Major Upgrades,因此格式必须高达255.255.65535.x(其中 x 在版本比较中被忽略)才能正常工作。 文件版本:这些存储在许多 PE 格式文件(.exe、.dll、.etc)的版本块中,也经常存储在File table 的Version 列中。将两者作为File Versioning Rules 的一部分进行比较,以确定给定文件是替换另一个文件还是已经被替换。他们通常会正确比较高达 65535.65535.65535.65535 的版本。 Assembly Version:如果您使用 .NET,您可能会遇到这些并将它们与文件版本混淆。 Windows Installer 仅在使用 GAC 时才关心这些。大多数操作都依赖于文件版本。

我想你说的是第一种情况。您可能会遇到的问题是,为了查看给定的已安装产品是否在Upgrade table 中描述的版本范围内而进行的版本比较是使用 DWORD 表示完成的。当像 901 这样的 主要 版本被粉碎成单个字节时,它将以难以预测和利用的方式溢出。很有可能它的行为类似于 103 的 主要 版本,否则可能会奏效。但是,minor 版本槽中的大量数字可能会影响被视为 major 版本的值。

请参阅Installshield 2011 - Problem Upgrading existing software with Version format 2009.727.1365 了解可能产生的后果的示例。

【讨论】:

正如迈克尔所说,ProductVersion 可能是您所指的,这里是微软的 cmets msdn.microsoft.com/en-us/library/aa370859(v=vs.85).aspx,我相信它现在仍然相关。

以上是关于使用 installshield 和 msi 时版本号都有哪些限制的主要内容,如果未能解决你的问题,请参考以下文章

使用 WiX 为 InstallShield 安装程序创建 msi 包装器

如何在InstallShield项目中以静默方式安装msi文件

我的一个应用程序 DLL 在我的 InstallShield MSI 安装程序中被视为程序集

如何在MSI Installshield重新启动管理器对话框中禁用“不关闭应用程序”选项

自定义操作中的第三方 exe - installshield

MSI 未卸载 .dll 文件