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

Поскольку 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 или что-то в этом роде.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
21
0
5 692
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

Ответ принят как подходящий

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

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

а вот PINVOKE для .NET:

IsWow64Process (ядро32)

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

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

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

The easiest way to test for 64-bit under .NET is to check the value of IntPtr.Size.

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

Редактировать: @Edit: Ага. :)

Другие вопросы по теме