如何找出给定的 exe/dll 属于哪个安装程序包

wig*_*igy 12 windows windows-installer

我想知道什么 MSI 在我的系统上安装了给定的 dll 或 exe。我知道 Windows 会修复已删除的文件(如果它们属于已安装的软件包)。我可以在不实际删除文件的情况下查询该信息吗?是否有工具或 Win32 API 来检查文件属于哪个包?

Zer*_*ro3 9

看来终究是有办法的!我最近在以下子树下发现了 Windows Installers 安装的文件的注册表项:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData

我编写了一个小的 Python 脚本来使用存储在那里的信息查找文件的安装程序:

> python windows-installer-file-search.py opus.dll
File: C:\Program Files (x86)\Mumble\opus.dll
Product: Mumble 1.2.13
Install user: S-1-5-18
Cached installer: C:\Windows\Installer\2f6b072.msi
Run Code Online (Sandbox Code Playgroud)

它可以在这里找到:https : //github.com/Zero3/windows-installer-file-search


Zer*_*ro3 6

如果您只是在大海捞针中找到合理的针头,那么这种对7-Zip 的快速而肮脏的滥用将起作用:

7z.exe l -an -air!C:\Windows\Installer\*.msi > needlelist.txt
Run Code Online (Sandbox Code Playgroud)

然后needlelist.txt在任何文本编辑器中打开,搜索needlename.dll,您将在 7-Zip 生成的列表中找到相应的 .msi 包。

(注意:此方法是“脏的”,因为它只是告诉您哪些 .msi 包包含名为 的文件needlename.dll。但对于大多数用例来说可能没问题。)