Как я могу использовать 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, включая очень старые.