Windows EXE文件附有版本号,由四个由点分隔的数字(例如1.0.0.0)组成。EXE版本号 - 如何正确比较次要版本
问题:什么是比较这些数字的正确方法?尤其是,1.15.0.0> 1.2.0.0(自15> 2)或反之亦然(因为在数学上为1.15 < 1.2)?
背景:我的一个应用程序已经达到3.9 *和我想知道wheter我可以继续3.10 *没有这种比较导致麻烦的版本号安装程序或其他组件。
Windows EXE文件附有版本号,由四个由点分隔的数字(例如1.0.0.0)组成。EXE版本号 - 如何正确比较次要版本
问题:什么是比较这些数字的正确方法?尤其是,1.15.0.0> 1.2.0.0(自15> 2)或反之亦然(因为在数学上为1.15 < 1.2)?
背景:我的一个应用程序已经达到3.9 *和我想知道wheter我可以继续3.10 *没有这种比较导致麻烦的版本号安装程序或其他组件。
正确的方法是考虑每个组分(用句点分隔的“”)依次为数字而非字符串值。因此,是1.15.0.0是> 1.2.0.0
如果您使用Powershell,它有一个内置的版本对象(基于.NET的System.Version
类型):[version]
,它将为您执行此功能。
[作为参考,各个部件是Major.Minor.Build.Revision
]
如MSDN at this page指出:
的版本由两个32位整数的,由4个16位 整数定义。
这意味着,给定两个版本的格式“Major.Minor.Release.Build”,你可以相信你一定会最终有足够的数据来组装成这样的64位无符号整数:
int64_t i1 = (v1->Major << 48) | (v1->Minor << 32) | (v1->Release << 16) | v1->Build;
int64_t i2 = (v2->Major << 48) | (v2->Minor << 32) | (v2->Release << 16) | v2->Build;
所以,你可以现在只是比较喜欢两个64位值:
if (i1 > i2) { ... }
对不起,5年后解决它,但我走来走去......
由于组件是分开的,我会将它们视为单独的数字,即15> 2,但我想这取决于编写应用程序的人的约定。 – Rup
@Rup:由于EXE文件格式是标准化的,而且这些版本号可以通过Windows API读取,我猜他们的语义也是标准化的。 – Heinzi
http://msdn.microsoft.com/en-us/library/system.version.aspx – Mob