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

Поскольку WMI-класс Win32_OperatingSystem включает только 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;
    }
}

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

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

Ответов (4)

Решение

Взгляните на решение Раймонда Ченса:

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

а вот PINVOKE для .NET:

IsWow64Process (ядро32)

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

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

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

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

Изменить : @Edit: Да. :)

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

РЕДАКТИРОВАТЬ: Да! Это скажет вам, является ли текущий процесс 64-битным, а не ОС в целом. Извините!