Esta é uma boa maneira de determinar a arquitetura do sistema operacional?
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.
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:
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.