Pergunta

Como a classe WMI Win32_OperatingSystem inclui apenas OSArchitecture no Windows Vista, escrevi rapidamente um método usando o registro para tentar determinar se o sistema atual é ou não de 32 ou 64 bits.

private Boolean is64BitOperatingSystem()
{
    RegistryKey localEnvironment = Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment");
    String processorArchitecture = (String) localEnvironment.GetValue("PROCESSOR_ARCHITECTURE");

    if (processorArchitecture.Equals("x86")) {
        return false;
    }
    else {
        return true;
    }
}

Funcionou muito bem para nós até agora, mas não tenho certeza do quanto gosto de olhar o registro.Esta é uma prática bastante padrão ou existe um método melhor?

Editar:Uau, esse código parece muito mais bonito na visualização.Vou considerar criar um link para um pastebin ou algo assim na próxima vez.

Foi útil?

Solução

Dê uma olhada na solução de Raymond Chen:

Como detectar programaticamente se você está executando no Windows de 64 bits

e aqui está o PINVOKE para .NET:

IsWow64Process (kernel32)

Atualizar: Eu teria problemas em verificar 'x86'.Quem pode dizer como o próximo processador de 32 bits da Intel ou da AMD pode ser designado.A probabilidade é baixa, mas é um risco.Você deve pedir ao sistema operacional para determinar isso por meio das APIs corretas, e não consultando o que poderia ser um valor específico da versão/plataforma do sistema operacional que pode ser considerado opaco para o mundo exterior.Faça a si mesmo as perguntas: 1 - a entrada de registro em questão está devidamente documentada pela MS, 2 - Se for, eles fornecem uma lista definitiva de valores possíveis que garantem que você, como desenvolvedor, tome uma decisão informada entre executar 32 bits ou 64 bits.Se a resposta for não, ligue para a API, sim, é um processo mais prolixo, mas está documentado e definitivo.

Outras dicas

A maneira mais fácil de testar 64 bits no .NET é verificar o valor de IntPtr.Size.

Acredito que o valor de IntPtr.Size seja 4 para um aplicativo de 32 bits rodando no WOW, não é?

Editar:@Editar:Sim.:)

A maneira mais fácil de testar 64 bits no .NET é verificar o valor de IntPtr.Size.

EDITAR:Dá!Isso lhe dirá se o processo atual é ou não de 64 bits, e não o sistema operacional como um todo.Desculpe!

Consultar o cadastro é perfeitamente válido, desde que você tenha certeza de que o usuário do aplicativo sempre terá acesso ao que você precisa.

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