从MSI文件中查找GUID

如何在Windows中列出已安装程序的GUID? 或者,如果我有MSI文件,是否更容易findGUID?

我正在通过与Orca的MSI文件,但不知道在哪里寻找GUID。

谢谢!

打包代码 , 产品 代码和升级 代码是Windows Installer数据库的三个主要GUID。 第一个存储在摘要信息流(Orca中的View菜单)中,其他存储在Property表中。 (其他形式的数据库(如合并模块和修补程序)在相似位置具有相似的GUID,例如合并模块的GUID或修补程序代码GUID(每个GUID都与存储库代码相同)。

要在机器上找到它们,您可以查看经常使用ProductCode的Uninstall键。 或者更好的是,如果您想要枚举机器上当前安装的内容,则可以调用MsiEnumProducts 。

有几种方法可以找到 已安装软件包 的产品GUID 。 请选择3号选项

最常见的是:

  1. 使用regedit.exe 检入以下基本路径下的注册表 。 搜索应用程序名称(或直接浏览每个子文件夹,直到找到它)。 当你找到它时,你可以把它传递给msiexec.exe:
- 32-BIT SECTION: HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall (per user section) 
 - 64-BIT SECTION: HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall 
 - MERGED SECTION (supposedly all of the above merged together, I have not verified): HKCR\Installer\Products 
  1. 检查%SystemRoot%\ Installer中本地缓存的MSI包 。 这是最初用于在计算机上安装产品的原始MSI的缓存版本。
    • 您将需要一个能够打开MSI文件的工具。 这里是一个列表和功能比较: 什么安装产品使用? InstallShield,WiX,Wise,Advanced Installer等 。
    • MSI是一个伪装的MS SQL数据库,您应该也可以使用任何兼容的MS SQL数据查看器工具打开它。
    • Windows SDK免费的MSI工具“ Orca ”是这个简单的数据检索任务的首选。 它快速,小巧,可靠。
    • 然后按照Michael Uhrman的建议从上面的答案中找到摘要流中的软件包代码,以及Property表中的升级和产品代码。 包代码也可以从Windows资源管理器的MSI文件的属性页中看到。
  2. 使用Powershell列出软件包信息。 我觉得这是最简单和最实际的选择。 请参阅此答案以获取屏幕截图和示例: 如何查找已安装的MSI安装程序的产品GUID?

如果您要做的是卸载有问题的产品,请参阅此综合卸载MSI答案: 从命令行卸载MSI文件,而不使用msiexec

如果您觉得使用VBScript而不是使用Powershell更舒服,请尝试Phil Wilson的这个答案: 如何找出哪些产品已安装 – 新产品已经安装MSI windows

通常(虽然不是普遍),如果一个软件使用基于MSI的安装,可以在卸载条目中找到GUID。 它通常或者是关键名称,或者将显示在UninstallString和/或UninstallPath值中。 有时候生活很简单,并且有一个ProductGuid值。

卸载条目可以在这里找到:

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 

在64位版本的Windows上,有两个这样的密钥,一个用于64位软件,另一个用于32位软件:

 HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall 

我的解决方案是我写了一个小的控制台应用程序,它返回任何MSI文件的ProductCode(名称作为程序参数传递)。 我正在通过阅读.msi文件本身的guid来做到这一点。 基本上我打开该msi文件作为一个字符串,并寻找以“ProductCode”开始的文本,获取其索引,并在该索引位置之前采取38个字符。 这是截图: 截图