windows vbscript 32bit-64bit

¿Cómo puedo usar VBScript para determinar si estoy ejecutando un sistema operativo Windows de 32 o 64 bits?



32bit-64bit (5)

Puede consultar PROCESSOR_ARCHITECTURE . A que se describe aquí , debe agregar algunas comprobaciones adicionales, ya que el valor de PROCESSOR_ARCHITECTURE será x86 para cualquier proceso de 32 bits, incluso si se ejecuta en un sistema operativo de 64 bits. En ese caso, la variable PROCESSOR_ARCHITEW6432 contendrá el bitness del sistema operativo. Más detalles en 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."

¿Cómo puedo detectar la bitness (32 bits frente a 64 bits) del sistema operativo Windows en VBScript?

Intenté este enfoque pero no funciona; Supongo que el (x86) está causando algún problema al verificar la carpeta.

¿Hay otra alternativa?

progFiles = "c: / archivos de programa" & "(" & "x86" & ")"

establecer fileSys = CreateObject ("Scripting.FileSystemObject")

Si fileSys.FolderExists (progFiles) Entonces

WScript.Echo "Folder Exists"

Terminara si


Se encontró con este mismo problema en el trabajo el otro día. Tropecé con esta genial pieza de vbscript y pensé que era demasiado bueno para no compartirlo.

Bits = GetObject("winmgmts:root/cimv2:Win32_Processor=''cpu0''").AddressWidth

Fuente: http://csi-windows.com/toolkit/csi-getosbits


Aquí hay un par de funciones de VBScript basadas en la respuesta muy concisa de @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

ACTUALIZACIÓN: según el consejo de @ Ekkehard.Horner, estas dos funciones se pueden escribir de manera más sucinta utilizando la sintaxis de una sola línea de la siguiente manera:

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

(Tenga en cuenta que los paréntesis que rodean la GetObject(...) = 32 no son necesarios, pero creo que añaden claridad con respecto a la precedencia del operador. También tenga en cuenta que la sintaxis de una sola línea utilizada en las implementaciones revisadas evita el uso de If/Then construye!)

ACTUALIZACIÓN 2: según los comentarios adicionales de @ Ekkehard.Horner, algunos pueden encontrar que estas implementaciones adicionales revisadas ofrecen concisión y legibilidad mejorada:

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


Las consultas de WMIC pueden ser lentas. Use las cadenas de entorno:

Function GetOsBits() Set shell = CreateObject("WScript.Shell") If shell.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%") = "AMD64" Then GetOsBits = 64 Else GetOsBits = 32 End If End Function


Anexo a la respuesta de Bruno: es posible que desee comprobar el sistema operativo en lugar del propio procesador, ya que podría instalar un sistema operativo anterior en una CPU más nueva:

strOSArch = GetObject("winmgmts:root/cimv2:Win32_OperatingSystem=@").OSArchitecture

Devuelve la cadena "32 bits" o "64 bits".