sistemas sistema saber para operativos operativo obtener informacion comando arquitectura c# windows registry

c# - saber - ¿Es esta una buena forma de determinar la arquitectura del sistema operativo?



sistema operativo de 64 bits (4)

Como 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.

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 : Wow, 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.


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

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

Editar : @Editar: Sí. :)


La forma más fácil de probar 64-bit bajo .NET es verificar 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!


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.


Eche un vistazo a la solución de Raymond Chens:

Cómo detectar mediante programación si se ejecuta en Windows de 64 bits

y aquí está el PINVOKE para .NET:

IsWow64Process (kernel32)

Actualización: me molestaría verificar "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.