Подтвердить что ты не робот

Как я могу проверить битту моей ОС с помощью Java? (J2SE, а не os.arch)

Я разрабатываю программное приложение, которое проверяет, какое программное обеспечение вы установили, но для этого я должен знать, является ли ОС 32-разрядной или 64-разрядной ОС. Я попробовал System.getProperty( "os.arch" ); но затем я прочитал, что эта команда показывает только битту JDK/JRE, а не сама ОС. Если бы вы могли рассказать мне, как узнать, какая ОС используется (Windows 7, Mac OS, Ubuntu и т.д.), Это было бы просто потрясающе C:

4b9b3361

Ответ 1

System.getProperty("os.arch");

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

Но 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 != null && arch.endsWith("64")
                  || wow64Arch != null && wow64Arch.endsWith("64")
                      ? "64" : "32";

См. также:

HOWTO: обнаружение процесса Bitness

Почему% processor_architecture% всегда возвращает x86 вместо AMD64

Определите, является ли текущая версия Windows 32-разрядной или 64-разрядной версией.

Ответ 3

Нет никакого способа сделать это, не получая конкретную форму. Посмотрите на последнее сообщение на странице this (решение имеет специфику для платформы).

Свойство os.name дает вам имя используемой операционной системы, os.version версию.

Ответ 4

Вы можете проверить, позвонив

System.getProperty("sun.arch.data.model");

Эта строка возвращает 32 или 64, которая идентифицирует, является ли JVM 32 или 64 битами.