2011-10-27 64 views
2

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 *没有这种比较导致麻烦的版本号安装程序或其他组件。

+0

由于组件是分开的,我会将它们视为单独的数字,即15> 2,但我想这取决于编写应用程序的人的约定。 – Rup

+0

@Rup:由于EXE文件格式是标准化的,而且这些版本号可以通过Windows API读取,我猜他们的语义也是标准化的。 – Heinzi

+1

http://msdn.microsoft.com/en-us/library/system.version.aspx – Mob

回答

3

正确的方法是考虑每个组分(用句点分隔的“”)依次为数字而非字符串值。因此,是1.15.0.0是> 1.2.0.0

如果您使用Powershell,它有一个内置的版本对象(基于.NET的System.Version类型):[version],它将为您执行此功能。

[作为参考,各个部件是Major.Minor.Build.Revision]

1

如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年后解决它,但我走来走去......