2008-08-06 8 views
15

Поскольку класс 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; 
    } 
} 

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

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

ответ

6

Посмотрите на решение Raymond Chens:

How to detect programmatically whether you are running on 64-bit Windows

и вот PInvoke для .NET:

IsWow64Process (kernel32)

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

1

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

1

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

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

2

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^