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

Так как класс 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;
    }
}

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

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

6.08.2008 19:41:59
4 ОТВЕТА
РЕШЕНИЕ

Взгляните на решение Raymond Chens:

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

и вот PINVOKE для .NET:

IsWow64Process (kernel32)

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

8
27.01.2013 12:44:17

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

1
6.08.2008 20:05:55

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

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

1
6.08.2008 20:01:58

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

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

Редактировать : @ Редактировать : Да. :)

2
6.08.2008 20:07:33