我想知道操作系统类型,意思是64位操作系统或32位操作系统。但我从32位/ 64位可执行文件获得不同的响应,获得有关操作系统的系统属性
我从系统属性获取详细信息。我有64位机器和OS 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"));
操作系统架构: amd64
操作系统名称:Windows 8
操作系统版本:6.2 amd64
数据模型:64
操作系统架构: x86
操作系统名称:Windows 8
操作系统版本:6.2 x86
数据模型:32
如何获得操作系统实际位类型?
答案 0 :(得分:1)
最佳解决方案(也是跨平台的IMO)就是这里给出的答案: https://stackoverflow.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,您可能很安全,因为Apple锁定JVM以匹配操作系统。但Linux和Solaris等......他们仍然可以在64位系统上使用32位JVM。所以请谨慎使用。
答案 1 :(得分:0)
这应该可以帮到你
System.getProperty("os.arch");
当JRE的体系结构为32位时,将返回“x86”。我们必须编写本机代码以使用JNI获得系统的真实体系结构。
答案 2 :(得分:0)
System.getProperty(“os.arch”)将始终返回jre的位类型,而不是实际操作系统的位类型。
从winapi编写jni代码并调用IsWow64Process
。因为你正在使用Windows。
此布尔函数告诉您进程是否在64位操作系统上运行。