2008-11-05 18 views

Respuesta

61
if (IntPtr.Size == 8) 
{ 
    // 64 bit machine 
} 
else if (IntPtr.Size == 4) 
{ 
    // 32 bit machine 
} 
+0

¿El compilador no desempeña ningún papel en el medio? –

5

me encontré con este código de Martijn Boven que hace el truco:

public static bool Is64BitMode() { 
    return System.Runtime.InteropServices.Marshal.SizeOf(typeof(IntPtr)) == 8; 
} 
+23

Es probable más eficiente para llamar IntPtr.Size en lugar de Marshal.SizeOf (typeof (IntPtr)) – JaredPar

+2

Me encantaría dar 1 al comentario de JaredPar; así es como lo haría ... –

131

Si está utilizando .NET 4.0, es decir una línea para el proceso actual:

Environment.Is64BitProcess 

Referencia: Environment.Is64BitProcess Property (MSDN)

+1

Gracias por publicar la respuesta, es genial saberlo. No voy a cambiar la respuesta aceptada actual porque originalmente esta pregunta era sobre .NET 3.5 pero también recomendaría a las personas que voten su respuesta. –

5

este ejemplo de código de Microsoft All In-One Marco de código puede responder a su pregunta:

Detect the process running platform in C# (CSPlatformDetector)

El ejemplo de código CSPlatformDetector demuestra las siguientes tareas relacionados con la detección de la plataforma:

  1. Detecta el nombre del sistema operativo actual. (por ejemplo, "Microsoft Windows 7 Enterprise")
  2. Detecta la versión del sistema operativo actual. (por ejemplo, "Microsoft Windows NT 6.1.7600.0")
  3. Determine si el sistema operativo actual es un sistema operativo de 64 bits.
  4. Determine si el proceso actual es un proceso de 64 bits.
  5. Determine si un proceso arbitrario que se ejecuta en el sistema es de 64 bits.

Si lo que desea es determinar si el proceso en ejecución es un proceso de 64 bits , puede utilizar la propiedad Environment.Is64BitProcess que es nuevo en .NET Framework 4.

Y si desee detectar si una aplicación arbitraria que se ejecuta en el sistema es un proceso de 64 bits, es necesario determinar el valor de bits del sistema operativo, y si es de 64 bits, llamada IsWow64Process() con el mango proceso de destino:

static bool Is64BitProcess(IntPtr hProcess) 
{ 
    bool flag = false; 

    if (Environment.Is64BitOperatingSystem) 
    { 
     // On 64-bit OS, if a process is not running under Wow64 mode, 
     // the process must be a 64-bit process. 
     flag = !(NativeMethods.IsWow64Process(hProcess, out flag) && flag); 
    } 

    return flag; 
} 
+1

Puede ser una biblioteca útil, un poco exagerada en este contexto :). –

0

En .Net estándar puede utilizar System.Runtime.InteropServices.RuntimeInformation.OSArchitecture

Cuestiones relacionadas