【问题标题】: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 的规则。 同样,我们在测试过程中没有遇到任何问题,但这让我们有点担心。

谁能帮忙解决这个问题?

非常感谢。

【问题讨论】:

    标签: windows-installer version installshield


    【解决方案1】:

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

    • 产品版本:存储在ProductVersion property中,由于它的压缩副本以DWORD形式存储在注册表中以支持Major Upgrades,因此格式必须高达255.255.65535.x(其中 x 在版本比较中被忽略)才能正常工作。
    • 文件版本:这些存储在许多 PE 格式文件(.exe、.dll、.etc)的版本块中,也经常存储在File tableVersion 列中。将两者作为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 了解可能产生的后果的示例。

    【讨论】:

    猜你喜欢
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多