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 en tant que processeur quelconque ) s’exécute en tant qu’application 32 bits ou 64 bits?

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

Si vous utilisez .NET 4.0, il s’agit d’une solution simple pour le processus actuel:

 Environment.Is64BitProcess 

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

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; } 

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

Détecter le processus en cours d’exécution en C # (CSPlatformDetector)

L’exemple de code CSPlatformDetector illustre les tâches suivantes liées à la détection de la plateforme:

  1. Détecte le nom du système d’exploitation actuel. (par exemple, “Microsoft Windows 7 Enterprise”)
  2. Détecte 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 voulez détecter si une application arbitraire s’exécutant sur le système est un processus 64 bits, vous devez déterminer le bit-bit du système d’exploitation et, s’il est 64 bits, appelez IsWow64Process() avec le handle 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; } 

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