2008-08-06 12 views
15

Dado que la clase WMI Win32_OperatingSystem solo incluye OSArchitecture en Windows Vista, rápidamente escribí un método usando el registro para intentar determinar si el sistema actual es o no de 32 o 64 bits.¿Es esta una buena forma de determinar la arquitectura del sistema operativo?

private Boolean is64BitOperatingSystem() 
{ 
    RegistryKey localEnvironment = Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment"); 
    String processorArchitecture = (String) localEnvironment.GetValue("PROCESSOR_ARCHITECTURE"); 

    if (processorArchitecture.Equals("x86")) { 
     return false; 
    } 
    else { 
     return true; 
    } 
} 

Nos ha funcionado bastante bien hasta ahora, pero no estoy seguro de cuánto me gusta buscar en el registro. ¿Es esta una práctica bastante estándar o hay un método mejor?

Editar: Guau, ese código se ve mucho más bonito en la vista previa. Consideraré el enlace a un pastebin o algo así, la próxima vez.

Respuesta

6

Echa un vistazo a la solución Raymond Chen:

How to detect programmatically whether you are running on 64-bit Windows

y aquí está la PInvoke para .NET:

IsWow64Process (kernel32)

Actualización: Me gustaría tener problema con la comprobación de 'x86'. ¿Quién puede decir qué Intel o el próximo procesador de AMD de 32 bits se puede designar como. La probabilidad es baja pero es un riesgo. Debería pedirle al sistema operativo que determine esto a través de las API correctas, no al consultar lo que podría ser una versión del sistema operativo/un valor específico de plataforma que podría considerarse opaca para el mundo exterior. Hágase las preguntas, 1 - si MS está documentando adecuadamente la entrada del registro, 2 - Si es así, proporcionan una lista definitiva de los posibles valores que le garantizan a usted como desarrollador tomar la decisión informada entre si está ejecutando 32 bit o 64 bit. Si la respuesta es no, entonces llame a la API, sí, pero es más larga pero está documentada y es definitiva.

1

Mirar en el registro es perfectamente válido, siempre y cuando pueda estar seguro de que el usuario de la aplicación siempre tendrá acceso a lo que necesita.

1

La forma más fácil de probar 64-bit en .NET es comprobar el valor de IntPtr.Size.

EDIT: Doh! Esto le indicará si el proceso actual es o no de 64 bits, no el sistema operativo como un todo. ¡Lo siento!

2

La forma más fácil de probar 64-bit en .NET es comprobar el valor de IntPtr.Size.

Creo que el valor de IntPtr.Size es 4 para una aplicación de 32 bits que se ejecuta bajo WOW, ¿no es así?

Editar: @Edit: Yeah. :)

Cuestiones relacionadas