Поскольку 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:
Обновление: Я бы не согласился с проверкой на 'x86'. Кто'скажет, как будет обозначен следующий 32-битный процессор intel'а или AMD'а. Вероятность мала, но риск есть. Вы должны попросить ОС определить это с помощью соответствующих API, а не путем запроса того, что может быть значением, специфичным для версии/платформы ОС, которое может считаться непрозрачным для внешнего мира. Задайте себе вопросы: 1 - документирована ли данная запись в реестре должным образом MS, 2 - если да, то предоставляет ли она окончательный список возможных значений, который гарантированно позволит вам как разработчику принять обоснованное решение о том, работаете ли вы под 32 или 64 битной ОС. Если ответ отрицательный, то обратитесь к API, да, это более долгий путь, но он документирован и окончателен.
самый легкий способ проверить на 64 бита под.NET состоит в том, чтобы проверить ценность IntPtr. Размер.
Я верю ценности IntPtr. Размер 4 для 32-битного приложения that' s бегущий под, НИЧЕГО СЕБЕ, isn' t это?
Отредактируйте : @Edit: Да.:)
Заглядывать в реестр вполне допустимо, если вы можете быть уверены, что пользователь приложения всегда будет иметь доступ к тому, что вам нужно.
Самый простой способ проверки на 64-битность в .NET - это проверка значения IntPtr.Size.
EDIT: Doh! Это покажет, является ли текущий процесс 64-битным, а не ОС в целом. Извините!