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

StackOverflow https://stackoverflow.com/questions/3903

  •  08-06-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top