1

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?

4 Answers 4

2

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_x64.msi
} else {
    & msiexec /qn /i 7zip_x86.msi
}
Sign up to request clarification or add additional context in comments.

Comments

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

Comments

1

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

Comments

0

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.