Как найти тип бит операционной системы

Я хочу знать тип ОС, это значит, что это 64-бит os или 32bit os. Но я получаю разные ответы от 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"));


При выполнении 64-битной исполняемой последующей реакции.


Архитектура ОС: amd64

Имя ОС: Windows 8

Версия ОС: 6.2 amd64

Модель данных: 64


При запуске 32bit Исполняемый получающий следующий ответ


Архитектура ОС: x86

Имя ОС: Windows 8

Версия ОС: 6.2 x86

Модель данных: 32


Как я могу получить фактический тип бит операционной системы?

Ответ 1

System.getProperty("os.arch");

Должен быть доступен на всех платформах, см. учебное пособие по Java System Properties для получения дополнительной информации.

Но 64-битные платформы Windows будут лежать в JVM, если это 32-разрядная JVM. На самом деле 64-битная Windows будет лежать в любом 32-битном процессе об окружающей среде, чтобы помочь старым 32-разрядным программам работать правильно на 64-битной ОС. Подробнее читайте в статье MSDN о WOW64.

В результате WOW64 32-битный JVM-вызов System.getProperty( "os.arch" ) вернет "x86". Если вы хотите получить реальную архитектуру базовой ОС в Windows, используйте следующую логику:

String arch = System.getenv("PROCESSOR_ARCHITECTURE");
String wow64Arch = System.getenv("PROCESSOR_ARCHITEW6432");

String realArch = arch.endsWith("64")
                  || wow64Arch != null && wow64Arch.endsWith("64")
                      ? "64" : "32";

Ссылка

Ответ 2

Лучшим решением (которое также является межплатформенным IMO) является ответ, приведенный здесь: fooobar.com/questions/123176/...

Я точно не верю, читая системную переменную os.arch. Хотя он работает, если пользователь запускает 64-битную JVM на 64-битной системе. Он не работает, если пользователь запускает 32-битную JVM в 64-разрядной системе.

Следующий код работает для правильного обнаружения 64-разрядных операционных систем Windows. В 64-битной системе Windows будет установлена ​​переменная среды "Programfiles (x86)". Он НЕ будет установлен в 32-битной системе, а java будет считать его нулевым.

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 и т.д. Они все еще могут использовать 32-разрядную JVM на своей 64-битной системе. Поэтому используйте это с осторожностью.

Ответ 3

Это поможет вам

System.getProperty("os.arch");

вернет "x86", когда архитектура JRE будет 32 бит. Мы должны написать собственный код, чтобы получить реальную архитектуру системы с помощью JNI.

Ответ 4

System.getProperty( "os.arch" ) всегда будет возвращать тип бит jre, а не фактическую операционную систему.

Напишите jni-код и calll IsWow64Process из winapi. Поскольку вы используете окна.

Эта логическая функция сообщает вам, работает ли процесс на 64-битных os.