¿Es esta una buena forma de determinar la arquitectura del sistema operativo?
Pregunta
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 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 si me gusta revisar el registro.¿Es esta una práctica bastante estándar o existe un método mejor?
Editar:Vaya, ese código se ve mucho más bonito en la vista previa.Consideraré vincularlo a un Pastebin o algo así la próxima vez.
Solución
Eche un vistazo a la solución de Raymond Chen:
Cómo detectar mediante programación si está ejecutando Windows de 64 bits
y aquí está el PINVOKE para .NET:
Actualizar: No estaría de acuerdo con comprobar si hay 'x86'.¿Quién puede decir cómo se designará el próximo procesador de 32 bits de Intel o AMD?La probabilidad es baja pero es un riesgo.Debe pedirle al sistema operativo que determine esto a través de las API correctas, no consultando cuál podría ser un valor específico de la versión/plataforma del sistema operativo que puede considerarse opaco para el mundo exterior.Hágase las preguntas: 1: ¿La entrada de registro en cuestión está debidamente documentada por MS? 2: Si es así, ¿proporcionan una lista definitiva de valores posibles que garantiza que le permitirá a usted, como desarrollador, tomar una decisión informada entre si está ejecutando o no? 32 bits o 64 bits.Si la respuesta es no, llame a la API. Sí, es más largo, pero está documentado y es definitivo.
Otros consejos
La forma más sencilla de probar 64 bits 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 en WOW, ¿no es así?
Editar:@Editar:Sí.:)
La forma más sencilla de probar 64 bits en .NET es comprobar el valor de IntPtr.Size.
EDITAR:¡Doh!Esto le indicará si el proceso actual es de 64 bits, no el sistema operativo en su conjunto.¡Lo siento!
Consultar el registro es perfectamente válido, siempre y cuando puedas estar seguro de que el usuario de la aplicación siempre tendrá acceso a lo que necesita.