Come faccio a sapere se la mia applicazione è in esecuzione come applicazione a 32 o 64 bit?
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?
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:
- Rileva il nome del sistema operativo corrente. (ad es. " Microsoft Windows 7 Enterprise ")
- Rileva la versione del sistema operativo corrente. (ad es. " Microsoft Windows NT 6.1.7600.0 ")
- Determina se il sistema operativo corrente è un sistema operativo a 64 bit.
- Determina se il processo corrente è un processo a 64 bit.
- Determina se un processo arbitrario in esecuzione sul sistema è a 64 bit.
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