为什么在Vista系统上运行Java会报告它是在XP系统上?

5

我发现了一个关于System.getProperty("os.name")的令人困惑的问题。根据Java bug on the matterthe Java 5 release notes(搜索“os.name”),Java在早期的Vista“longhorn”版本中存在一个bug,应该在v5发布10版中得到修复。

然而,在我的Vista SP1系统上 - 使用v5发布15版和v6发布6版 - System.getProperty("os.name")返回“Windows XP”。进一步地,System.getProperty("os.version")返回“5.1”。我无法通过Google找到与此问题相关的任何信息。这让我想知道是否有些奇怪的设置导致了这个问题。我尝试从测试C程序调用GetVersionEx() API函数,它返回主版本号6,次要版本0(正如我对Vista安装所期望的那样)。

还有其他人遇到过这个问题吗?是否知道解决方法或有任何建议可以在不使用JNI的情况下解决它?


这帮助我弄清楚为什么我们的产品返回错误的值。Java bug已在6u14中修复...太糟糕了,我们仍然使用6u13 =D进行发货。 - GreenKiwi
2个回答

10

可能是Java以XP兼容模式运行。 在这种情况下,Vista将伪造Windows版本号,使Java相信它在XP上运行。 检查可执行文件的兼容性选项卡。


您真是个天才! :) 我在兼容模式下运行Eclipse,因为Vista中的自动滚动功能使Eclipse几乎无法使用。因此,它也以兼容模式运行我从Eclipse启动的任何Java代码。关闭兼容模式后,它可以正常地在Vista上报告 :D - David Arno

0

Windows 2000的实际版本号是5.0。Windows XP是5.1。据说Vista是6.0,所以您的测试程序运行正确。听起来Java肯定弄错了。

您可能需要依靠JNI来获得正确的答案。我有点假设您已经问过自己为什么需要根据使用XP还是Vista来改变程序的行为。


我需要改变行为的原因很简单:符号链接。它们存在于Vista中,而XP中不存在 ;) - David Arno

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接