Является ли это хорошим способом определения архитектуры ОС?
Поскольку класс 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;
}
}
До сих пор это хорошо для нас работало, но я не уверен, как мне нравится просматривать реестр. Это довольно стандартная практика или есть лучший метод?
Изменить: Ого, этот код выглядит намного красивее в предварительном просмотре. В следующий раз я буду рассматривать связь с пастебином или что-то в этом роде.
Ответы
Ответ 1
Взгляните на решение Raymond Chens:
Как программно определить, работаете ли вы в 64-разрядной Windows.
и здесь PINVOKE для .NET:
IsWow64Process (kernel32)
Обновление: Я бы поставил вопрос с проверкой на "x86". Кто скажет, какой Intel или AMD следующий 32-разрядный процессор можно обозначить как. Вероятность низкая, но это риск. Вы должны попросить ОС определить это с помощью правильных API, а не путем запроса того, что может быть значением версии ОС/платформы, которое может считаться непрозрачным для внешнего мира. Задайте себе вопросы: 1 - соответствующая запись в реестре должным образом задокументирована MS, 2 - если это так, они предоставляют окончательный список возможных значений, которые гарантированно позволят вам как разработчику принять обоснованное решение о том, используете ли вы 32 бит или 64 бит. Если ответ отрицательный, тогда вызывается API, да, но он длиннее, но документирован и определен.
Ответ 2
Самый простой способ протестировать 64-разрядную версию .NET - проверить значение IntPtr.Size.
Я считаю, что значение IntPtr.Size равно 4 для 32-битного приложения, работающего под WOW, не так ли?
Изменить: @Edit: Да.:)
Ответ 3
Заглядывая в реестр, вполне допустимо, если вы можете быть уверены, что пользователь приложения всегда будет иметь доступ к тому, что вам нужно.
Ответ 4
Самый простой способ протестировать 64-разрядную версию .NET - проверить значение IntPtr.Size.
РЕДАКТИРОВАТЬ: Doh! Это покажет вам, является ли текущий процесс 64-разрядным, а не ОС в целом. Извините!