Java 8 os.version不包含整个Windows版本

时间:2016-12-05 17:55:09

标签: java

对于Windows 10,Java 8从系统属性返回os.version = 10.0,而Windows' ver'命令返回10.0.14393。

有没有办法在不运行外部命令的情况下从java获取完整的Windows版本?

为什么Java会截断Windows版本?

1 个答案:

答案 0 :(得分:4)

答案是,在代码中一如既往 - 并不是它会截断它;它只是永远不会填充内部版本号。

查看jdk8源代码,他们只填充了dwMajorVersion and dwMinorVersion

sprintf(buf, "%d.%d", ver.dwMajorVersion, ver.dwMinorVersion);
sprops.os_version = _strdup(buf);

至少从jdk6开始就是这样。

现在,如果你想获得一个完整的Windows版本,包括版本,那么你可以use JNA - 你正在寻找的类/接口是com.sun.jna.platform.win32.WinNT,其中包含{ {1}}结构,以及VERSIONINFOEX函数的com.sun.jna.platform.win32.Kernel32。我没有一份Windows副本可以为你找出代码;但它应该相对容易(可能是这样的?我甚至不能尝试测试它):

GetVersionEx

要求理由;它真的非常简单 - 它在Windows 10之前从未真正重要 - 你根据操作系统的主要版本和次要版本对行为进行了强有力的描述;通过为Windows 10构建功能引入了它的复杂功能。