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

Windows EXE版本号--如何正确比较次要版本,windows,version,exe,Windows,Version,Exe,Windows EXE文件附有版本号,由四位数字组成,以点分隔(例如1.0.0.0) 问题:比较这些数字的正确方法是什么?特别是,1.15.0.0>1.2.0.0(因为15>2)还是1.15正确的方法是考虑每个组件(由句号分隔)。依次作为数值而不是字符串值。所以,是的,1.15.0.0大于1.2.0.0 如果您使用Powershell,它有一个内置的版本对象(基于.NET的类型):[version],它将为您执行此功能 [供参考,单个组件为主要组件、次要组件、构建组件、修订版]如MSDN中所述:

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

问题:比较这些数字的正确方法是什么?特别是,1.15.0.0>1.2.0.0(因为15>2)还是1.15<1.2



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

< P>正确的方法是考虑每个组件(由句号分隔)。依次作为数值而不是字符串值。所以,是的,1.15.0.0大于1.2.0.0

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

[供参考,单个组件为
主要组件、次要组件、构建组件、修订版
]

如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;

很抱歉在5年后解决了这个问题,但我在四处走动…

由于组件是分开的,我会将它们视为单独的数字,即15>2,但我想这取决于编写应用程序的人的约定。@Rup:因为EXE文件格式是标准化的,这些版本号可以通过Windows API读取,我猜它们的语义也是标准化的。
if (i1 > i2) { ... }