Является ли это хорошим способом определения архитектуры ОС?

Поскольку 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 или что-то подобное.

Решение

Посмотрите на решение Раймонда Ченса:

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

, и вот PINVOKE для .NET:

IsWow64Process (kernel32)

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

Комментарии (0)

самый легкий способ проверить на 64 бита под.NET состоит в том, чтобы проверить ценность IntPtr. Размер.

Я верю ценности IntPtr. Размер 4 для 32-битного приложения that' s бегущий под, НИЧЕГО СЕБЕ, isn' t это?

Отредактируйте : @Edit: Да.:)

Комментарии (0)

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

Комментарии (0)

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

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

Комментарии (0)