Come faccio a sapere se la mia applicazione è in esecuzione come applicazione a 32 o 64 bit?

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

  •  06-07-2019
  •  | 
  •  

Domanda

Come faccio a sapere se la mia applicazione (compilata in Visual & nbsp; Studio & nbsp; 2008 come Qualsiasi CPU ) è in esecuzione come applicazione a 32 o 64 bit?

È stato utile?

Soluzione

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

Altri suggerimenti

Se stai usando .NET 4.0, è un one-liner per l'attuale processo:

Environment.Is64BitProcess

Riferimento: Proprietà Environment.Is64BitProcess (MSDN)

Ho trovato questo codice da Martijn Boven che fa il trucco:

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

Questo esempio di codice di Microsoft All-In-One Code Framework può rispondere alla tua domanda:

Rileva il processo che esegue la piattaforma in C # (CSPlatformDetector)

  

L'esempio di codice CSPlatformDetector illustra le seguenti attività   in relazione al rilevamento della piattaforma:

     
      
  1. Rileva il nome del sistema operativo corrente. (ad es. " Microsoft Windows 7 Enterprise ")
  2.   
  3. Rileva la versione del sistema operativo corrente. (ad es. " Microsoft Windows NT 6.1.7600.0 ")
  4.   
  5. Determina se il sistema operativo corrente è un sistema operativo a 64 bit.
  6.   
  7. Determina se il processo corrente è un processo a 64 bit.
  8.   
  9. Determina se un processo arbitrario in esecuzione sul sistema è a 64 bit.
  10.   

Se vuoi solo determinare se il processo attualmente in esecuzione è a 64 bit processo, è possibile utilizzare la proprietà Environment.Is64BitProcess che è nuovo in .NET Quadro 4.

E se vuoi rilevare se un'applicazione arbitraria è in esecuzione sul sistema è un processo a 64 bit, è necessario determinare il sistema operativo bitness e, se è a 64 bit, chiama IsWow64Process () con l'handle del processo di destinazione:

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

In .Net Standard è possibile utilizzare System.Runtime.InteropServices.RuntimeInformation.OSArchitecture

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top