Como posso saber se meu aplicativo está sendo executado como um aplicativo de 32 bits ou 64 bits?
Pergunta
Como posso saber se meu aplicativo (compilado no Visual Studio 2008 como Qualquer CPU ) está sendo executado como um aplicativo de 32-bit ou 64-bit?
Solução
if (IntPtr.Size == 8)
{
// 64 bit machine
}
else if (IntPtr.Size == 4)
{
// 32 bit machine
}
Outras dicas
Se você estiver usando .NET 4.0, é um one-liner para a corrente processo:
Environment.Is64BitProcess
Referência: Environment.Is64BitProcess Propriedade (MSDN)
Eu encontrei este código de Martijn Boven que faz o truque:
public static bool Is64BitMode() {
return System.Runtime.InteropServices.Marshal.SizeOf(typeof(IntPtr)) == 8;
}
Este exemplo de código a partir do Microsoft All-In-One Framework código pode responder a sua pergunta:
Detectar o processo em execução plataforma em C # (CSPlatformDetector)
O exemplo de código CSPlatformDetector demonstra as seguintes tarefas relacionada com a detecção de plataforma:
- Detectar o nome do sistema operacional atual. (por exemplo. "Microsoft Windows 7 Enterprise")
- Detectar a versão do sistema operacional atual. (por exemplo. "Microsoft Windows NT 6.1.7600.0")
- Determinar se o sistema operacional atual é um sistema operacional de 64 bits.
- Determinar se o processo atual é um processo de 64 bits.
- Determinar se um processo arbitrário em execução no sistema é de 64 bits.
Se você quiser apenas para determinar se o processo atualmente em execução é um 64-bit processo, você pode usar a propriedade Environment.Is64BitProcess que é nova no .NET Framework 4.
E se você quiser detectar se uma aplicação arbitrária em execução no sistema
é um processo de 64 bits, você precisa determinar o número de bits do sistema operacional, e se for de 64 bits,
IsWow64Process()
chamada com o identificador de processo-alvo:
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;
}
Na Net padrão você pode usar System.Runtime.InteropServices.RuntimeInformation.OSArchitecture