Как я могу проверить разрядность моей ОС, используя Java ??(J2SE, а не os.arch) - PullRequest
24 голосов
/ 20 января 2011

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

Ответы [ 4 ]

45 голосов
/ 09 мая 2011
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-битной

2 голосов
/ 09 мая 2011

os.arch НЕ является разрядностью ОС, остерегайтесь этого решения!http://mark.koli.ch/2009/10/javas-osarch-system-property-is-the-bitness-of-the-jre-not-the-operating-system.html

1 голос
/ 20 января 2011

Нет способа сделать это без указания платформы.Посмотрите на последний пост на этой странице (решение для этой платформы зависит от платформы).

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

0 голосов
/ 20 января 2011

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

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

Эта строка возвращает 32 или 64, которые определяют, является ли JVM 32 или 64 битами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...