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 ?
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
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
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