对于Windows 10,Java 8从系统属性返回os.version = 10.0,而Windows' ver'命令返回10.0.14393。
有没有办法在不运行外部命令的情况下从java获取完整的Windows版本?
为什么Java会截断Windows版本?
答案 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构建功能引入了它的复杂功能。