web-dev-qa-db-fra.com

Comment savoir si mon application s'exécute en tant qu'application 32 bits ou 64 bits?

Comment savoir si mon application (compilée dans Visual Studio 2008 sous la forme Any CP) fonctionne en tant qu'application 32 bits ou 64 bits?

61
if (IntPtr.Size == 8) 
{
    // 64 bit machine
} 
else if (IntPtr.Size == 4) 
{
    // 32 bit machine
}
63
Perica Zivkovic

Si vous utilisez . NET 4.0, il s'agit d'une ligne unique pour le processus actuel:

Environment.Is64BitProcess

Référence: propriété Environment.Is64BitProcess (MSDN)

143
Sam

J'ai trouvé ce code de Martijn Boven qui fait l'affaire:

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

Cet exemple de code de Microsoft All-In-One Code Framework peut répondre à votre question:

Détecter la plate-forme exécutant le processus en C # (CSPlatformDetector)

L'exemple de code CSPlatformDetector illustre les tâches suivantes liées à la détection de plate-forme:

  1. Détectez le nom du système d'exploitation actuel. (par exemple, "Microsoft Windows 7 Enterprise")
  2. Détectez la version du système d'exploitation actuel. (par exemple, "Microsoft Windows NT 6.1.7600.0")
  3. Déterminez si le système d'exploitation actuel est un système d'exploitation 64 bits.
  4. Déterminez si le processus en cours est un processus 64 bits.
  5. Déterminez si un processus arbitraire exécuté sur le système est 64 bits.

Si vous souhaitez simplement déterminer si le processus en cours d'exécution est un processus 64 bits, vous pouvez utiliser la propriété Environment.Is64BitProcess qui est nouvelle dans .NET Framework 4.

Et si vous souhaitez détecter si une application arbitraire exécutée sur le système est un processus 64 bits, vous devez déterminer le bitness du système d'exploitation, et s'il est 64 bits, appelez IsWow64Process() avec le descripteur de processus cible :

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;
}
5
Scott Ge

Dans .Net Standard, vous pouvez utiliser System.Runtime.InteropServices.RuntimeInformation.OSArchitecture

0
Owen Pauling