Это хороший способ определить архитектуру ОС? - PullRequest
15 голосов
/ 06 августа 2008

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

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

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

Ответы [ 4 ]

6 голосов
/ 06 августа 2008

Взгляните на решение Рэймонда Чена:

Как программно определить, работаете ли вы на 64-битной Windows

и вот ПИНВОК для .NET:

IsWow64Process (kernel32)

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

2 голосов
/ 07 августа 2008

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

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

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

1 голос
/ 07 августа 2008

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

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

1 голос
/ 06 августа 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...