注意:这些API由versionhelper.h定义,该文件包含在Windows 8.1 Preview软件开发工具包(SDK)中。此文件可与其他Microsoft Visual Studio版本一起使用,以实现对Windows 8.1 Preview之前版本的相同功能。
使用GetVersionEx是完全可以的。如果有必要,它在很长一段时间内也不会从Windows中移除。微软一直以来都保持着与旧程序的兼容性。例如,即使是20年前被弃用的Win16 API,你仍然可以调用。
我在原来的问题中添加了一个额外的部分,询问是否有人了解Environment.OSVersion对象的内部。在这个网站上搜索了几分钟后,我找到了这个问题:
现在,“官方”答案本身对我来说并不是很有趣,但是Phil Devaney的第二个答案提到了一个名为“Reflector”的应用程序,似乎可以做一些魔术。所以我下载了它,然后惊讶地发现,我能够反编译Environment.OSVersion对象构造函数的P-Code:
Win32Native.OSVERSIONINFO osVer = new Win32Native.OSVERSIONINFO();
if (!GetVersion(osVer))
{
throw new InvalidOperationException(GetResourceString("InvalidOperation_GetVersion"));
}
所以,这就是全部:Environment.OSVersion 内部使用 GetVersion 函数,该函数在未来可能无法正常工作。看起来 VerifyVersionInfo 和 P/Invoke 是解决此问题的方法。
现在我必须在另一台机器上下载 .NET 4.5 并查看该实现是否有任何不同。
马克) 也许这对你有趣 GetVersionExEx 但请注意,VerifyVersionInfo 在 Windows 操作系统的后续版本中也可能被弃用(正如 msdn 社交论坛中的 ms 技术人员所述)。
此代码依赖于 VerifyVersionInfo 并提供相同的使用体验。 代码中还使用了二分算法。
版本助手 API 用于请求 API,而此代码用于精确值。
谢谢)