【发布时间】:2020-09-03 04:48:59
【问题描述】:
我可以从\Uninstall 和其他注册表项中获取ProductCode,但我没有看到特定的PackageCode 列表。
有没有办法可靠地获取已安装的 MSI 的软件包代码列表?打开每个 MSI 不是首选,但仅出于性能原因。
【问题讨论】:
我可以从\Uninstall 和其他注册表项中获取ProductCode,但我没有看到特定的PackageCode 列表。
有没有办法可靠地获取已安装的 MSI 的软件包代码列表?打开每个 MSI 不是首选,但仅出于性能原因。
【问题讨论】:
请在下面找到用于检索各种 MSI 信息(包括包代码)的 VBScript。
在桌面上创建一个 VBScript 文件并粘贴以下代码。从桌面运行脚本并查找创建的文件 msiinfo.csv。在 Excel 或同等工具中打开此文件,然后导入逗号分隔的文件以便正确查看。
Set fso = CreateObject("Scripting.FileSystemObject")
Set output = fso.CreateTextFile("msiinfo.csv", True, True)
Set installer = CreateObject("WindowsInstaller.Installer")
On Error Resume Next ' we ignore all errors
' Write headers
output.writeline ("ProductName" & ", " & "Version" & ", " & "ProductCode" & ", " & "PackageCode")
For Each product In installer.ProductsEx("", "", 7)
name = product.InstallProperty("ProductName")
version=product.InstallProperty("VersionString")
productcode = product.ProductCode
packagecode=product.InstallProperty("PackageCode")
output.writeline (name & ", " & version & ", " & productcode & ", " & packagecode )
Next
output.Close
【讨论】:
软件包代码实际上只对 MSI 有用,因此 MSI 不会过多地公开它们。产品代码已经唯一标识了已安装的产品,因此给定产品代码,您可以使用MsiGetProductInfoEx 和INSTALLPROPERTY_PACKAGECODE 来获取产品的包代码。
【讨论】:
您可以在 HKEY_CLASSES_ROOT\Installer\Products{PRODUCT_CODE_IN_COMPRESSED_GUID_FORMAT} 中找到 PackageCode 值。
请注意,PackageCode 字符串值也将采用压缩 GUID 格式(没有破折号和“反转”的 GUID),因此如果将该值与 MSI 文件中的值进行比较(例如使用 SuperOrca)由于显示格式,它们可能不匹配。
【讨论】: