我们最近将我们的 Windows 软件包从 RPM (cygwin) 切换到 MSI (wix)。拥有原生包装是一个非常受欢迎的变化,我们打算坚持下去。然而,MSI 感觉它所做的事情过于复杂,而且似乎没有提供一些基本的能力。但我可能弄错了。
有没有办法从命令行列出所有已安装的 MSI?
我们最近将我们的 Windows 软件包从 RPM (cygwin) 切换到 MSI (wix)。拥有原生包装是一个非常受欢迎的变化,我们打算坚持下去。然而,MSI 感觉它所做的事情过于复杂,而且似乎没有提供一些基本的能力。但我可能弄错了。
有没有办法从命令行列出所有已安装的 MSI?
也许这是一个很好的起点,例如 MSDN 中的 VB 脚本:
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
您可以使用PowerShell和Windows Management Instrumentation (WMI)。这是一个单行:
Get-WmiObject -Class win32_product
这是Get-WmiObject
cmdlet的帮助:
http://technet.microsoft.com/en-us/library/dd315295.aspx
这是一个示例,我们选择第一个安装的程序并将其格式化为表格:
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
我不确定这是否是您需要的,但您可以从命令行查询卸载列表:
REG QUERY HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall