EXE版本号 – 如何正确比较次要版本

Windows EXE文件附有版本号,由四个由点分隔的数字(例如1.0.0.0)组成。

问题 :比较这些数字的正确方法是什么? 特别是1.15.0.0> 1.2.0.0(自15> 2)或反之亦然(因为在math上1.15 <1.2)?


背景:我的一个应用程序已经达到了3.9。*,我想知道我可以继续3.10。*没有安装程序或其他组件比较版本号造成麻烦。

正确的方法是将每个组件(由句点分隔)依次视为数字而不是字符串值。 所以,是1.15.0.0是> 1.2.0.0

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

[供参考,单个组件是Major.Minor.Build.Revision ]

正如MSDN 在本页所述 :

版本由两个32位整数组成,由四个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年后解决,但我走了一圈…