Cómo saber a qué paquete de instalación pertenece un exe/dll determinado

Cómo saber a qué paquete de instalación pertenece un exe/dll determinado

Me gustaría saber qué MSI instaló un dll o exe determinado en mi sistema. Sé que Windows repara los archivos eliminados si pertenecen a un paquete instalado. ¿Puedo consultar esa información sin eliminar el archivo? ¿Existe alguna herramienta o API de Win32 para comprobar a qué paquete pertenece un archivo?

Respuesta1

¡Parece que podría haber una manera después de todo! Recientemente descubrí entradas de registro para archivos instalados por los instaladores de Windows en el siguiente subárbol:

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

Escribí un pequeño script en Python para buscar un archivo en el instalador usando la información almacenada allí:

> 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

Está disponible aquí:https://github.com/Zero3/windows-installer-file-search

Respuesta2

Si está de acuerdo con simplemente encontrar agujas plausibles en el pajar, este rápido y sucio abuso de7 cremallerastrabajará:

7z.exe l -an -air!C:\Windows\Installer\*.msi > needlelist.txt

Luego ábralo needlelist.txten cualquier editor de texto, busque needlename.dlly encontrará el paquete .msi correspondiente en los listados generados por 7-Zip.

(Nota: este método es "sucio" porque simplemente le indica qué paquetes .msi contienen un archivo llamado needlename.dll. Pero probablemente esté bien para la mayoría de los casos de uso).

información relacionada