我的经理给了我安装 msi 的机器上的配置文件列表。
他让我找出他们来自哪个微星。(因为我们需要为那个 msi 写一些逻辑)。
如何查找此文件来自哪个 msi?
手动打开 orca 并搜索它很困难,因为 msi 的数量更多。
还有其他替代方法吗?我们正在使用 Wix 创建 msi。
我的经理给了我安装 msi 的机器上的配置文件列表。
他让我找出他们来自哪个微星。(因为我们需要为那个 msi 写一些逻辑)。
如何查找此文件来自哪个 msi?
手动打开 orca 并搜索它很困难,因为 msi 的数量更多。
还有其他替代方法吗?我们正在使用 Wix 创建 msi。
我将获取 .config 文件的 MD5 哈希,然后查询 .msis 中的 MsiFileHash 表,直到找到匹配的哈希。
不能保证 MSI 安装了该文件。也就是说,我经常使用的一个快速技巧是 ms-dos findstr 命令
在安装了配置文件的机器上:
CD %WINDIR%\Installer
FINDSTR -i -m dark.exe *.msi *.msi
这将对字符串 dark.exe 的所有 MSI 文件进行不区分大小写的搜索。然后使用 ORCA 检查生成的 MSI,以查看命中是否准确以及它是什么产品。提醒:MSI 名称将是一些简短的十六进制哈希,因为这些是剥离/缓存的 MSI,而不是原始 MSI。
如果您可以在机器上运行代码,那么使用 Windows Installer API 的实用程序将为您提供答案。这样的实用程序很容易用 VC++ 编写。
Windows Installer API 的起点是MsiEnumComponents,它将为您提供系统上安装的每个组件的组件代码。从那里,MsiEnumClients
将为您提供包含特定组件的每个产品的产品代码。然后你可以使用MsiGetComponentPath
来获取组件的路径。如果它是您感兴趣的路径,则使用MsiGetProductInfoEx查找安装它的产品,例如INSTALLPROPERTY_INSTALLSOURCE
和INSTALLPROPERTY_PACKAGENAME.
这听起来很复杂,但事实并非如此。