Вот пара функций VBScript, основанная на очень кратком ответе @Bruno:
Function Is32BitOS()
If GetObject("winmgmts:root\cimv2:Win32_Processor='cpu0'").AddressWidth _
= 32 Then
Is32BitOS = True
Else
Is32BitOS = False
End If
End Function
Function Is64BitOS()
If GetObject("winmgmts:root\cimv2:Win32_Processor='cpu0'").AddressWidth _
= 64 Then
Is64BitOS = True
Else
Is64BitOS = False
End If
End Function
ОБНОВЛЕНИЕ: По совету @ Ekkehard.Horner, эти две функции могутнаписать более кратко , используя однострочный синтаксис следующим образом:
Function Is32BitOS() : Is32BitOS = (GetObject("winmgmts:root\cimv2:Win32_Processor='cpu0'").AddressWidth = 32) : End Function
Function Is64BitOS() : Is64BitOS = (GetObject("winmgmts:root\cimv2:Win32_Processor='cpu0'").AddressWidth = 64) : End Function
(обратите внимание, что скобки, окружающие условие GetObject(...) = 32
, не обязательны, но я считаю, что онидобавьте ясности в отношении приоритета операторов. Также обратите внимание, что однострочный синтаксис, используемый в пересмотренных реализациях, позволяет избежать использования конструкции If/Then
!)
ОБНОВЛЕНИЕ 2: В соответствии сдополнительные отзывы от @ Ekkehard.Horner, некоторые могут найти, что эти дальнейшие пересмотренные реализации предлагают и краткость и улучшенную читаемость:
Function Is32BitOS()
Const Path = "winmgmts:root\cimv2:Win32_Processor='cpu0'"
Is32BitOS = (GetObject(Path).AddressWidth = 32)
End Function
Function Is64BitOS()
Const Path = "winmgmts:root\cimv2:Win32_Processor='cpu0'"
Is64BitOS = (GetObject(Path).AddressWidth = 64)
End Function