2011-01-20 9 views
22

Estoy desarrollando una aplicación de software que verifica qué tipo de software tiene instalado, pero para poder hacerlo, debo saber si el sistema operativo es de 32 bits o de 64 bits. Intenté System.getProperty ("os.arch"); pero luego leí que este comando solo nos muestra el bit de JDK/JRE, no el sistema operativo en sí. Si pudiera decirme cómo saber qué sistema operativo se está usando (Windows 7, Mac OS, Ubuntu, etc.) sería simplemente increíble C:¿Cómo puedo verificar la bitidez de mi sistema operativo con Java? (J2SE, no os.arch)

+0

Bueno, sí, eso es lo que pensé, pero luego vi este enlace, mi ght quiere comprobarlo: http://mark.koli.ch/2009/10/javas-osarch-system-property-is-the-bitness-of-the-jre-not-the-operating-system.html dime lo que piensas –

+0

Quizás quieras aceptar una respuesta alternativa. – assylias

Respuesta

42
System.getProperty("os.arch"); 

debería estar disponible en todas las plataformas, consulte la System Properties Tutorial de Java para obtener más información.

Pero Las plataformas Windows de 64 bits se ubicarán en la JVM si se trata de una JVM de 32 bits. En realidad, 64 bits de Windows dependerán de cualquier proceso de 32 bits sobre el entorno para ayudar a los viejos programas de 32 bits a funcionar correctamente en un sistema operativo de 64 bits. Lea el MSDN article about WOW64 para obtener más información.

Como resultado de WOW64, una JVM de 32 bits llamando a System.getProperty("os.arch") devolverá "x86". Si desea obtener el verdadera arquitectura del sistema operativo subyacente en Windows, utilice la siguiente lógica:

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"; 

Ver también:

HOWTO: Detect Process Bitness

Why %processor_architecture% always returns x86 instead of AMD64

Detect whether current Windows version is 32 bit or 64 bit

+0

Obtengo NPE en la línea realArch en mac osx :( – user2693017

+0

Funciona mejor que nuestra implementación anterior. ¡Gracias! – CMerrill

+0

Quiero disculparme, ¡todo este tiempo pensé que tenía su respuesta seleccionada como la respuesta correcta! Pero ya está hecha (: –

1

No hay forma de hacerlo sin tener que obtener una plataforma específica. Echa un vistazo a la última publicación en la página this (la solución es específica de la plataforma).

La propiedad os.name le da el nombre del sistema operativo utilizado, os.version la versión.

-1

Puede comprobar llamando

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

esta línea devuelve 32 o 64, que identifica si la JVM es de 32 ó 64 bits.

+3

Las propiedades del sistema que comienzan con 'sol'. No son estándar. – Isaac

+5

Además, el OP es sobre el sistema operativo, no el JVM – leonbloy

Cuestiones relacionadas