Как я могу использовать VBScript для определения того, запускаю ли я 32-разрядную или 64-разрядную ОС Windows?
Как определить битовую (32-разрядную или 64-разрядную) ОС Windows в VBScript?
Я пробовал этот подход, но он не работает; Я предполагаю, что (x86) вызывает некоторую проблему, проверяющую папку.
Есть ли другая альтернатива?
progFiles = "c:\program files" и "(" & "x86" и ")"
набор fileSys = CreateObject ( "Scripting.FileSystemObject" )
Если файлSys.FolderExists(progFiles) Затем
WScript.Echo "Folder Exists"
Конец Если
Ответы
Ответ 1
Вы можете запросить PROCESSOR_ARCHITECTURE
. Описанный здесь, вам нужно добавить дополнительные проверки, потому что значение PROCESSOR_ARCHITECTURE
будет x86
для любого 32-битного процесса, даже если он работает на 64-битной ОС. В этом случае переменная PROCESSOR_ARCHITEW6432
будет содержать бит BS. Дополнительная информация в MSDN.
Dim WshShell
Dim WshProcEnv
Dim system_architecture
Dim process_architecture
Set WshShell = CreateObject("WScript.Shell")
Set WshProcEnv = WshShell.Environment("Process")
process_architecture= WshProcEnv("PROCESSOR_ARCHITECTURE")
If process_architecture = "x86" Then
system_architecture= WshProcEnv("PROCESSOR_ARCHITEW6432")
If system_architecture = "" Then
system_architecture = "x86"
End if
Else
system_architecture = process_architecture
End If
WScript.Echo "Running as a " & process_architecture & " process on a " _
& system_architecture & " system."
Ответ 2
На днях возникла проблема с этой же проблемой. Наткнулся на этот гениальный кусок vbscript и подумал, что это слишком хорошо, чтобы не делиться.
Bits = GetObject("winmgmts:root\cimv2:Win32_Processor='cpu0'").AddressWidth
Источник: http://csi-windows.com/toolkit/csi-getosbits
Ответ 3
Вот пара функций 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
Ответ 4
Запросы WMIC могут быть медленными. Используйте строки окружения:
Function GetOsBits()
Set shell = CreateObject("WScript.Shell")
If shell.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%") = "AMD64" Then
GetOsBits = 64
Else
GetOsBits = 32
End If
End Function
Ответ 5
Добавление к ответу Бруно: вы можете проверить ОС, а не сам процессор, поскольку вы могли установить более старую ОС на новый процессор:
strOSArch = GetObject("winmgmts:root\cimv2:[email protected]").OSArchitecture
Возвращает строку "32-разрядный" или "64-разрядный".
Ответ 6
Определение, является ли CPU 32-разрядным или 64-разрядным, но вопрос заключается в том, как определить, является ли ОС 32-разрядной или 64-разрядной. Когда выполняется 64-разрядная Windows, определяется переменная среды ProgramW6432.
Это:
CreateObject("WScript.Shell").Environment("PROCESS")("ProgramW6432") = ""
вернет true для 32-битной ОС и false для 64-разрядной ОС и будет работать для всех версий Windows, включая очень старые.