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