Я хотел бы узнать, какой MSI установил данный dll или exe в моей системе. Я знаю, что Windows исправляет удаленные файлы, если они принадлежат установленному пакету. Могу ли я запросить эту информацию, не удаляя файл? Есть ли инструмент или Win32 API для проверки того, к какому пакету принадлежит файл?
решение1
Похоже, что способ все-таки есть! Недавно я обнаружил записи реестра для файлов, установленных установщиками Windows, в следующем поддереве:
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
Он доступен здесь:https://github.com/Zero3/windows-installer-file-search
решение2
Если вас устраивает просто находить правдоподобные иголки в стоге сена, то это быстрое и грязное злоупотребление7-Зипбудет работать:
7z.exe l -an -air!C:\Windows\Installer\*.msi > needlelist.txt
Затем откройте его needlelist.txt
в любом текстовом редакторе, выполните поиск needlename.dll
, и вы найдете соответствующий пакет .msi в списках, сгенерированных 7-Zip.
(Примечание: этот метод «грязный», поскольку он просто сообщает вам, какие пакеты .msi содержат файл с именем needlename.dll
. Но он, вероятно, подойдет для большинства случаев использования.)