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.txt
en cualquier editor de texto, busque needlename.dll
y 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).