How do I list installed MSI from the command line?

2019-03-15 08:35发布

问题:

We recently switched our Windows software packages from RPM (cygwin) to MSI (wix). Having a native packaging is a much welcome change and we intend to stick with it. However, MSI feels overly complicated for what it does and doesn't seem to provide some basic abilities. But I'm probably mistaken.

Is there a way to list all installed MSI from the command line ?

回答1:

Mabybe this is a good starting point for you example VB Script from MSDN:

strComputer = "."

Set objWMIService = GetObject("winmgmts:" & _
    "{impersonationLevel=impersonate}!\\" & _
    strComputer & _
    "\root\cimv2")

Set colSoftware = objWMIService.ExecQuery _
    ("SELECT * FROM Win32_Product")   

If colSoftware.Count > 0 Then

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objTextFile = objFSO.CreateTextFile( _
        "c:\SoftwareList.txt", True)

    For Each objSoftware in colSoftware
        objTextFile.WriteLine objSoftware.Caption & vbtab & _
        objSoftware.Version
    Next

    objTextFile.Close

Else
    WScript.Echo "Cannot retrieve software from this computer."

End If


回答2:

You may use PowerShell and Windows Management Instrumentation (WMI). Here is a one liner:

Get-WmiObject -Class win32_product

Here is help for the Get-WmiObject cmdlet:

http://technet.microsoft.com/en-us/library/dd315295.aspx

Here is a sample where we select the first installed program and format it as a table:

PS C:\Users\knut> Get-WmiObject -Class win32_product |
>> select -First 1 | ft Name, Version, Vendor -AutoSize
>>

Name             Version  Vendor
----             -------  ------
AWS SDK for .NET 1.2.0200 Amazon Web Services Developer Relations


回答3:

I'm not sure if this is what you need but you can query the uninstall list from the command line with:

REG QUERY HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall