如何检测VBScript中的Windows操作系统的位(32位与64位)?
我试过这个方法,但是不行; 我猜(x86)是造成一些问题,检查该文件夹..
还有其他的select吗?
progFiles =“c:\ program files”&“(”&“x86”&“)”
设置fileSys = CreateObject(“Scripting.FileSystemObject”)
如果fileSys.FolderExists(progFiles)那么
WScript.Echo "Folder Exists"
万一
你可以查询PROCESSOR_ARCHITECTURE
。 这里描述的是,您必须添加一些额外的检查,因为对于任何32位进程, PROCESSOR_ARCHITECTURE
的值将为x86
,即使它在64位操作系统上运行。 在这种情况下,变量PROCESSOR_ARCHITEW6432
将包含OS位数。 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."
前些天在工作中遇到了同样的问题。 偶然发现了这个天才的vbscript,觉得太好了,不要分享。
Bits = GetObject("winmgmts:root\cimv2:Win32_Processor='cpu0'").AddressWidth
资料来源: http : //csi-windows.com/toolkit/csi-getosbits
这里有一对基于@Bruno非常简洁的答案的VBScript函数:
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
WMIC查询可能会很慢。 使用环境字符串:
Function GetOsBits() Set shell = CreateObject("WScript.Shell") If shell.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%") = "AMD64" Then GetOsBits = 64 Else GetOsBits = 32 End If End Function
Bruno的答案补充:您可能需要检查操作系统而不是处理器本身,因为您可以在较新的CPU上安装较旧的操作系统:
strOSArch = GetObject("winmgmts:root\cimv2:Win32_OperatingSystem=@").OSArchitecture
返回字符串“32位”或“64位”。