Como posso saber se meu aplicativo está sendo executado como um aplicativo de 32 bits ou 64 bits?

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

  •  06-07-2019
  •  | 
  •  

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?

Foi útil?

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:

  1. Detectar o nome do sistema operacional atual. (por exemplo. "Microsoft Windows 7 Enterprise")
  2. Detectar a versão do sistema operacional atual. (por exemplo. "Microsoft Windows NT 6.1.7600.0")
  3. Determinar se o sistema operacional atual é um sistema operacional de 64 bits.
  4. Determinar se o processo atual é um processo de 64 bits.
  5. 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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top