如何找到操作系统位类型[重复]

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,请编辑答案;我相信你可能错过了。

以上是关于如何找到操作系统位类型[重复]的主要内容,如果未能解决你的问题,请参考以下文章

win10如何查看电脑是32位还是64位的系统

python3的最大整数值[重复]

错误:二进制“<<”:未找到采用“std::string”类型的右侧操作数的运算符 [重复]

电脑如何选择32位还是64位系统

如何找到偶数或奇数“1”位[重复]

64位win7系统如何安装MySQL