Será esta uma boa maneira de determinar OS Arquitetura?

votos
15

Como a classe Win32_OperatingSystem WMI inclui apenas OSArchitecture no Windows Vista, eu rapidamente escreveu-se um método que utiliza o registro para tentar determinar se ou não o sistema atual é um sistema 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;
    }
}

Tem funcionado muito bem para nós até agora, mas eu não tenho certeza o quanto eu gosto de olhar através do registro. Essa é uma prática bastante normal ou há um método melhor?

Editar : Uau, isso código é muito mais bonita na visualização. Eu vou considerar que liga a um pastebin ou algo assim, da próxima vez.

Publicado 06/08/2008 em 20:41
fonte usuário
Em outras línguas...                            


4 respostas

votos
6

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

Como detectar programaticamente se você estiver executando em 64 bits do Windows

e aqui está a pinvoke para .NET:

IsWow64Process (kernel32)

Update: eu ter problema com a verificação de 'x 86'. Quem vai dizer o que a Intel de ou processador de 32 bits ao lado da AMD pode ser designado como. A probabilidade é baixa, mas é um risco. Você deve perguntar o sistema operacional para determinar isso por meio da API é correto, não consultando o que poderia ser um valor específico versão OS / plataforma que pode ser considerado opaco para o mundo exterior. Pergunte a si mesmo as perguntas, 1 - é a entrada de registo em causa devidamente documentadas por MS, 2 - Se é que eles fornecem uma lista definitiva de possíveis valores que são garantidos para permitir que você como um desenvolvedor para tomar a decisão informada entre se você está executando 32 bits ou 64 bits. Se a resposta for não, então chamar a API de, sim, é uma mas mais prolixo, mas é documentado e definitiva.

Respondeu 06/08/2008 em 20:49
fonte usuário

votos
2

A maneira mais fácil de testar versões de 64 bits sob .NET é verificar o valor de IntPtr.Size.

Eu acredito que o valor de IntPtr.Size é de 4 para uma aplicação de 32 bits que está sendo executado sob WOW, não é?

Editar : @EDIT: Yeah. :)

Respondeu 06/08/2008 em 21:07
fonte usuário

votos
1

A maneira mais fácil de testar versões de 64 bits sob .NET é verificar o valor de IntPtr.Size.

EDIT: Doh! Isto irá dizer-lhe ou não o processo atual é de 64 bits, não o sistema operacional como um todo. Desculpa!

Respondeu 06/08/2008 em 21:01
fonte usuário

votos
1

Olhando para o registro é perfeitamente válido, desde que você pode ter certeza de que o usuário do aplicativo sempre terá acesso ao que você precisa.

Respondeu 06/08/2008 em 20:48
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more