问题
I have just downloaded the two .msi installers for 7zip (x86 and x64). Does anyone have a simple script I can use to detect the OS architecture and launch the appropriate .msi file?
回答1:
this might help
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessors = objWMIService.ExecQuery _
("Select * From Win32_Processor")
For Each objProcessor in colProcessors
If objProcessor.Architecture = 0 Then
Wscript.Echo "This is an x86 computer."
ElseIf objProcessor.Architecture = 1 Then
Wscript.Echo "This is a MIPS computer."
ElseIf objProcessor.Architecture = 2 Then
Wscript.Echo "This is an Alpha computer."
ElseIf objProcessor.Architecture = 3 Then
Wscript.Echo "This is a PowerPC computer."
ElseIf objProcessor.Architecture = 5 Then
Wscript.Echo "This is a ARM computer."
ElseIf objProcessor.Architecture = 6 Then
Wscript.Echo "This is an ia64 computer."
ElseIf objProcessor.Architecture = 9 Then
Wscript.Echo "This is an x64 computer."
Else
Wscript.Echo "The computer type could not be determined."
End If
Next
回答2:
I found a great vbscript, written by Monimoy Sanyal, posted on Microsoft Technet. It also gives information about system architecture, if 32-bit system run on the 64-bit hardware. https://gallery.technet.microsoft.com/scriptcenter/Determine-If-Your-System-969670e3
Option Explicit
Dim ObjWMI, ColSettings, ObjProcessor
Dim StrComputer, ObjNetwork
Set ObjNetwork = WScript.CreateObject("WScript.Network")
StrComputer = Trim(ObjNetwork.ComputerName)
Set ObjNetwork = Nothing
WScript.Echo VbCrLf & "Computer Name: " & StrComputer
WScript.Echo vbNullString
Set ObjWMI = GetObject("WINMGMTS:" & "{ImpersonationLevel=Impersonate,AuthenticationLevel=Pkt}!\\" & StrComputer & "\Root\CIMV2")
Set ColSettings = ObjWMI.ExecQuery ("SELECT * FROM Win32_Processor")
For Each ObjProcessor In ColSettings
Select Case ObjProcessor.Architecture
Case 0
WScript.Echo "Processor Architecture Used by the Platform: x86"
Case 6
WScript.Echo "Processor Architecture Used by the Platform: Itanium-Based System"
Case 9
WScript.Echo "Processor Architecture Used by the Platform: x64"
End Select
Select Case ObjProcessor.ProcessorType
Case 1
WScript.Echo "Processor Type: Other. Not in the Known List"
Case 2
WScript.Echo "Processor Type: Unknown Type"
Case 3
WScript.Echo "Processor Type: Central Processor (CPU)"
Case 4
WScript.Echo "Processor Type: Math Processor"
Case 5
WScript.Echo "Processor Type: DSP Processor"
Case 6
WScript.Echo "Processor Type: Video Processor"
End Select
WScript.Echo "Processor: " & ObjProcessor.DataWidth & "-Bit"
WScript.Echo "Operating System: " & ObjProcessor.AddressWidth & "-Bit"
WScript.Echo vbNullString
If ObjProcessor.Architecture = 0 AND ObjProcessor.AddressWidth = 32 Then
WScript.Echo "This Machine has 32 Bit Processor and Running 32 Bit OS"
End If
If (ObjProcessor.Architecture = 6 OR ObjProcessor.Architecture = 9) AND ObjProcessor.DataWidth = 64 AND ObjProcessor.AddressWidth = 32 Then
WScript.Echo "This Machine has 64-Bit Processor and Running 32-Bit OS"
End If
If (ObjProcessor.Architecture = 6 OR ObjProcessor.Architecture = 9) AND ObjProcessor.DataWidth = 64 AND ObjProcessor.AddressWidth = 64 Then
WScript.Echo "This Machine has 64-Bit Processor and Running 64-Bit OS"
End If
Next
Set ObjProcessor = Nothing: Set ColSettings = Nothing: Set ObjWMI = Nothing: StrComputer = vbNullstring
回答3:
You said simple, but didn't specify a language ...
Batch (.cmd
):
IF /I %PROCESSOR_ARCHITECTURE% EQU x86 (
msiexec /qn /i 7zip_x86.msi
) ELSE (
msiexec /qn /i 7zip_x64.msi
)
VBScript (.vbs
):
Set oShell = WScript.CreateObject("WScript.Shell")
proc_arch = oShell.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%")
If proc_arch = 'x86' Then
oShell.Run("msiexec /qn /i 7zip_x86.msi"), 0, true
Else
oShell.Run("msiexec /qn /i 7zip_x64.msi"), 0, true
End If
PowerShell (.ps1
):
if ($env:PROCESSOR_ARCHITECTURE -eq "x86") {
& msiexec /qn /i 7zip_x86.msi
} else {
& msiexec /qn /i 7zip_x64.msi
}
# or ...
if ([Environment]::Is64BitOperatingSystem) {
& msiexec /qn /i 7zip_x86.msi
} else {
& msiexec /qn /i 7zip_x64.msi
}
回答4:
Probably crude and not very ... "safe" ...
Just check for the existence of C:\Program Files (x86)
which is only present on a 64-bit system.
来源:https://stackoverflow.com/questions/11300916/os-architecture-detection-script