【问题标题】:From installed file ,how to find which msi would have installed the file?从已安装的文件中,如何找到哪个 msi 安装了该文件?
【发布时间】:2013-03-26 07:17:26
【问题描述】:

我的经理给了我安装 msi 的机器上的配置文件列表。

他让我找出他们来自哪个 msi。 (因为我们需要为那个 msi 写一些逻辑)。

如何找到这个文件来自哪个msi?

在 orca 中手动打开并搜索它很困难,因为 msi 的数量更多。

还有其他替代方法吗?我们正在使用 Wix 来创建 msi。

【问题讨论】:

    标签: wix windows-installer wix3.5 orca


    【解决方案1】:

    我会获取 .config 文件的 MD5 哈希,然后查询 .msis 中的 MsiFileHash 表,直到找到匹配的哈希。

    【讨论】:

    • 很遗憾微星没有像 RPM (rpm -qf) 这样的功能。
    【解决方案2】:

    无法保证 MSI 安装了该文件。也就是说,我经常使用的一个快速技巧是 ms-dos findstr 命令

    在安装了配置文件的机器上:

    CD %WINDIR%\Installer
    FINDSTR -i -m dark.exe *.msi *.msi
    

    这将对字符串dark.exe 的所有MSI 文件进行不区分大小写的搜索。然后使用 ORCA 检查生成的 MSI,以查看命中是否准确以及它是什么产品。提醒:MSI 名称将是一些简短的十六进制哈希,因为这些是剥离/缓存的 MSI,而不是原始 MSI。

    【讨论】:

      【解决方案3】:

      如果您可以在机器上运行代码,那么使用 Windows Installer API 的实用程序将为您提供答案。这样的实用程序很容易用 VC++ 编写。

      Windows Installer API 的起点是MsiEnumComponents,它将为您提供系统上安装的每个组件的组件代码。从那里,MsiEnumClients 将为您提供包含特定组件的每个产品的产品代码。然后你可以使用MsiGetComponentPath 来获取组件的路径。如果是你感兴趣的路径,那就用MsiGetProductInfoEx了解安装它的产品,比如INSTALLPROPERTY_INSTALLSOURCEINSTALLPROPERTY_PACKAGENAME.

      这听起来很复杂,但事实并非如此。

      【讨论】:

        猜你喜欢
        • 2018-03-20
        • 1970-01-01
        • 2011-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多