编程误区:Windows版本检查存在的问题

编程误区:Windows版本检查存在的问题

作者:BlogUpdater |  时间:2020-12-09 |  浏览:993 |  评论已关闭 条评论

蝎子
操作系统有一个版本号来表示当前的版本,它确实很重要,但是,有很多盆友使用一种错误的方式来检查版本。下面我们来具体看看。

Windows95
在Win95时期,很多开发者都使用了类似于下面的代码对操作系统版本进行检查:

我们先说结果:我们不得不将Windows95上的GetVersion函数的返回值修改为3.95,而不是4.0。
它应该是要返回4.0的。

为什么要这样设计?
让我们考虑,如果Windows 95的GetVersion函数返回了4.0,则版本号中的主版本检查通过,但是次版本号却不会通过,因为0小于10。

这个问题是如此的普遍,以至于我们放弃了为每个应用程序做兼容性指导,而是使用这种简单而粗暴的做法:如果应用程序调用GetVersion获取操作系统版本,则我们统一返回3.95。
这样,上面的版本检查代码就可以正常通过了。
不是很完美,但是确实能工作,对吧。

总结
我突然想起来,同时期的DirectX也总是返回4.x,会不会出于同样的考虑呢?
也许还真是。

不过话说回来,Microsoft已经不再建议开发者直接对系统版本号做硬编码比较了,而是使用诸如IsFeatureXXXAvailable这样的方式来获取某个特性在当前系统是否可用,这种方式,看起来:更直观,也不容易出错。

这个小技巧,大家伙可以试试看。

最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Bad version number checks》

标签:

评论已关闭。