Это хороший способ определить ОС архитектуры?

голоса
15

Так как класс Win32_OperatingSystem WMI включает только OSArchitecture в Windows Vista, я быстро написал метод с использованием реестра, чтобы попытаться определить, существующая система, является ли или не система 32 или 64.

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;
    }
}

Это сработало очень хорошо для нас до сих пор, но я не знаю, сколько я люблю смотреть через реестр. Это довольно стандартная практика или есть лучший способ?

Изменить : Wow, что код выглядит намного симпатичнее в предварительном просмотре. Я буду считать ссылки на Pastebin или что - то, в следующий раз.

Задан 06/08/2008 в 20:41
источник пользователем
На других языках...                            


4 ответов

голоса
6

Посмотрите на решение Raymond Chens:

Как определить программно ли вы работаете на 64-битных ОС Windows

и вот PInvoke для .NET:

IsWow64Process (kernel32)

Обновление: я бы вопрос с проверкой на «x86». Кто сказал , что корпорации Intel или на следующий 32 - битный процессор AMD может быть назначен. Вероятность мала , но это риск. Вы должны спросить ОСА , чтобы определить это с помощью правильных API, а не с помощью запроса , что может быть версия ОС / платформы конкретного значения , которое может считаться непрозрачным для внешнего мира. Задайте себе вопросы, 1 - это запись в реестре касается должным образом задокументированы MS, 2 - Если это сделать , они обеспечивают окончательный список возможных значений , которые гарантированно позволят вам как разработчику , чтобы сделать осознанный выбор между ли вы работаете 32 бит или 64 бит. Если ответ нет, то вызвать API, да это , но еще долго наматывается , но это документально и окончательным.

Ответил 06/08/2008 d 20:49
источник пользователем

голоса
2

Самый простой способ, чтобы проверить на 64-битной под .NET, чтобы проверить значение IntPtr.Size.

Я считаю, что значение IntPtr.Size является 4 для приложения 32-битном, который работает под WOW, не так ли?

Edit : @Edit: Да. :)

Ответил 06/08/2008 d 21:07
источник пользователем

голоса
1

Самый простой способ, чтобы проверить на 64-битной под .NET, чтобы проверить значение IntPtr.Size.

EDIT: Doh! Это скажет вам, является ли текущий процесс 64-бит, а не ОС в целом. Сожалею!

Ответил 06/08/2008 d 21:01
источник пользователем

голоса
1

Глядя в реестр вполне допустимо, так долго, как вы можете быть уверены в том, что пользователь приложения всегда будут иметь доступ к тому, что вам нужно.

Ответил 06/08/2008 d 20:48
источник пользователем

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