Переменная среды PROCESSOR_ARCHITECTURE
содержит адресную ширину запущенного процесса, которая не обязательно совпадает с шириной операционной системы или процессоров. Быстрый способ убедиться в этом - выполнить следующую команду ...
$Env:PROCESSOR_ARCHITECTURE
... в 32- и 64-разрядных сеансах PowerShell и сравнении результатов.
Итак, если GetEnvironmentVariable("PROCESSOR_ARCHITECTURE")
возвращает "AMD64"
, то у вас определенно есть 64-битный процесс, операционные системы и процессоры. Если он вернет "x86"
, то у вас определенно будет 32-разрядный процесс, хотя вы все равно не будете знать, являются ли операционная система и процессоры 32- или 64-разрядными.
Если вы действительно стремитесь к ширине адреса операционной системы, тогда .NET 4 предлагает свойство Environment.Is64BitOperatingSystem . Вы также можете использовать WMI в любой версии .NET для чтения свойства OSArchitecture
класса Win32_OperatingSystem :
static string GetOSArchitecture()
{
var query = new WqlObjectQuery("SELECT OSArchitecture FROM Win32_OperatingSystem");
using (var searcher = new ManagementObjectSearcher(query))
using (var results = searcher.Get())
using (var enumerator = results.GetEnumerator())
{
enumerator.MoveNext();
return (string) enumerator.Current.GetPropertyValue("OSArchitecture");
}
}
... хотя, к сожалению, свойство OSArchitecture
существует только в Windows Vista / Server 2008 и более поздних версиях.
Для всех версий Windows, начиная с 2000 года, вы можете попробовать p / вызвать функцию GetSystemInfo () и проверить wProcessorArchitecture
член структуры SYSTEM_INFO .