¿Es esta una buena forma de determinar la arquitectura del sistema operativo?

StackOverflow https://stackoverflow.com/questions/3903

  •  08-06-2019
  •  | 
  •  

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.

¿Fue útil?

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:

IsWow64Process (kernel32)

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top