Поскольку 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.Size.
Обновлено: Да! Это скажет вам, является ли текущий процесс 64-битным, а не ОС в целом. Извини!
The easiest way to test for 64-bit under .NET is to check the value of IntPtr.Size.
Я считаю, что значение IntPtr.Size равно 4 для 32-битного приложения, работающего под WOW, не так ли?
Редактировать: @Edit: Ага. :)