如何在Windows中列出已安装程序的GUID? 或者,如果我有MSI文件,是否更容易findGUID?
我正在通过与Orca的MSI文件,但不知道在哪里寻找GUID。
谢谢!
打包代码 , 产品 代码和升级 代码是Windows Installer数据库的三个主要GUID。 第一个存储在摘要信息流(Orca中的View菜单)中,其他存储在Property表中。 (其他形式的数据库(如合并模块和修补程序)在相似位置具有相似的GUID,例如合并模块的GUID或修补程序代码GUID(每个GUID都与存储库代码相同)。
要在机器上找到它们,您可以查看经常使用ProductCode的Uninstall键。 或者更好的是,如果您想要枚举机器上当前安装的内容,则可以调用MsiEnumProducts 。
有几种方法可以找到 已安装软件包 的产品GUID 。 请选择3号选项 。
最常见的是:
- 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
如果您要做的是卸载有问题的产品,请参阅此综合卸载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个字符。 这是截图: