如何找到操作系统位类型[重复]
Posted
技术标签:
【中文标题】如何找到操作系统位类型[重复]【英文标题】:How to find the OS bit type [duplicate] 【发布时间】:2014-01-18 08:25:47 【问题描述】:我想知道操作系统类型,是64位操作系统还是32位操作系统。但是我从 32 位/64 位可执行文件中得到了不同的响应,它获取了有关操作系统的系统属性
我正在从系统属性中获取详细信息。我有 64 位机器和操作系统 windows 8.1 X64
"OS Architecture : " + System.getProperty("os.arch"));
"OS Name : " + System.getProperty("os.name"));
"OS Version : " + System.getProperty("os.version")
"Data Model : " + System.getProperty("sun.arch.data.model"));
在运行 64bit Executable 时得到以下响应。
操作系统架构:amd64
操作系统名称:Windows 8
操作系统版本:6.2 amd64
数据模型:64
在运行 32bit Executable 时得到以下响应。
操作系统架构:x86
操作系统名称:Windows 8
操作系统版本:6.2 x86
数据模型:32
如何获取操作系统的实际位类型?
【问题讨论】:
数据模型如果您看到同一台机器根据可执行的 32/64 位类型返回 32 和 64 @TejKiran 是的,我明白了,所以我删除了该评论并添加了解决方案。 @TGO:不,这个问题要求跨平台解决方案,而链接的问题是特定于平台的。 【参考方案1】:System.getProperty("os.arch") 将始终返回 jre 的位类型,而不是实际操作系统的位类型。
编写jni代码并从winapi调用IsWow64Process
。由于您使用的是Windows。
这个布尔函数告诉你进程是否在 64 位操作系统上运行。
【讨论】:
【参考方案2】:这应该对你有帮助
System.getProperty("os.arch");
当 JRE 的体系结构为 32 位时,将返回“x86”。我们必须编写原生代码才能使用 JNI 获得系统的真实架构。
【讨论】:
这个属性给出了意想不到的结果 - 在运行 32 位可执行文件时给出 x86 和相同的代码,如果运行 64 位可执行文件然后返回 amd64,即使操作系统是 64 位 如果值包含x86,则应该是32位操作系统,否则为64位。我对吗?为什么它被否决了? os.arch 返回 JVM 特征 - 在 64 位操作系统上运行的 32 位 jvm 将为 os.arch 返回 x86。 @assylias 是的,我明白了。我也更新了我的答案。【参考方案3】:最好的解决方案(也是跨平台的 IMO)是这里给出的答案: https://***.com/a/2269242/1973164
我不完全相信阅读 os.arch 系统变量。如果用户在 64 位系统上运行 64 位 JVM,则它可以工作。如果用户在 64 位系统上运行 32 位 JVM,则它不起作用。
以下代码适用于正确检测 Windows 64 位操作系统。在 Windows 64 位系统上,将设置环境变量“Programfiles(x86)”。它不会在 32 位系统上设置,java 会将其读取为 null。
boolean is64bit = false; if (System.getProperty("os.name").contains("Windows")) is64bit = (System.getenv("ProgramFiles(x86)") != null); else is64bit = (System.getProperty("os.arch").indexOf("64") != -1);
对于其他操作系统,如 Linux、Solaris 或 Mac,我们也可能会看到此问题。所以这不是一个完整的解决方案。对于 mac,您可能是安全的,因为苹果会锁定 JVM 以匹配操作系统。但是 Linux 和 Solaris 等。他们可能仍然在他们的 64 位系统上使用 32 位 JVM。所以请谨慎使用。
【讨论】:
虽然理论上这可以回答这个问题,it would be preferable 在这里包含答案的基本部分,并提供链接以供参考。 @KarlRichter 虽然您链接到的 answer 听起来很合理,但您正在使用主观 answer 作为指导来否决其他答案。我没有链接到 SO 之外的内容,而是链接到这里已经存在的内容。同时,我建议您查看the tour,其中特别提到使用 cmets 以防您需要澄清,如果您认为自己有 fix,请编辑答案;我相信你可能错过了。以上是关于如何找到操作系统位类型[重复]的主要内容,如果未能解决你的问题,请参考以下文章