¿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
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".