2010-05-19 22 views
5

Aquí está mi pregunta. ¿Cuál es la mejor manera de determinar en qué arquitectura de bits se ejecuta su aplicación?¿Cómo puede mi programa determinar si se está ejecutando en Windows de 32 o 64 bits?

Lo que estoy buscando hacer: en un servidor de 64 bits quiero que mi aplicación lea fuentes de datos de 64 bits (almacenadas en la clave de registro Software \ Wow6432Node \ ODBC \ ODBC.INI \ Fuentes de datos ODBC) y si desea leer fuentes de datos de 32 bits, (es decir, leer de Fuentes de datos de software \ ODBC \ ODBC.INI \ ODBC).

Puede que me esté faltando el punto, pero no me importa en qué modo se está ejecutando mi aplicación. Simplemente quiero saber si el sistema operativo es de 32 o 64 bits.

[System.Environment.OSVersion.Platform no parece cortarlo para mí. Devuelve Win32NT en mi máquina xp local y en un servidor win2k8 de 64 bits (incluso cuando todos mis proyectos están configurados para 'cualquier CPU')]

+0

duplicados de http://stackoverflow.com/questions/266082/how-do-i-tell-if-my- aplicación-es-corriendo-como-una-32-o-aplicación de 64 bits –

Respuesta

3

Ni siquiera debería preocuparse por esto normalmente. El sistema redirige automáticamente las consultas de registro al Software\Wow6432Node al ejecutar una aplicación de 32 bits en una plataforma de 64 bits.

+1

Para hacer que su aplicación se ejecute como de 32 bits independientemente de la plataforma, cambie la plataforma exe a "x86 solamente". Todavía se ejecutará en plataformas x64 y se redirigirá automáticamente a las claves Wow6432Node. –

4

Pruebe la propiedad Environment.Is64BitOperatingSystem. Este es uno nuevo agregado en .Net 4.0 específicamente con el propósito de verificar el tipo de sistema operativo.

+0

Gracias pero debería haber mencionado que estoy restringido a .net 2.0 – user48408

2

No debe leer el Wow6432Node directamente. Use RegistryView para especificar una vista de 32 bits cuando se ejecuta como una aplicación de 64 bits.

+0

Desafortunadamente 'RegistryView' solo está disponible desde .NET 4.0. – Regent

4

, Solución sencilla, segura versión del marco agnóstico sin ir al registro:

Console.WriteLine(
    "Is 64-bit? {0}", 
    (
     System.Runtime.InteropServices.Marshal.SizeOf(typeof(IntPtr)) == sizeof(Int64) 
      ? "Yes" 
      : "No" 
    ) 
); 
+0

¡Bastante elegante! – code4life

+0

Sí, pero si se está ejecutando en modo de 32 bits en una máquina de 64 bits, lo anterior devolverá falso no? – user48408

Cuestiones relacionadas