Gostaria de saber qual MSI instalou uma determinada dll ou exe em meu sistema. Eu sei que o Windows corrige arquivos excluídos se eles pertencerem a um pacote instalado. Posso consultar essas informações sem realmente excluir o arquivo? Existe uma ferramenta ou API Win32 para verificar a qual pacote um arquivo pertence?
Responder1
Parece que afinal pode haver uma maneira! Recentemente descobri entradas de registro para arquivos instalados pelo Windows Installers na seguinte subárvore:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData
Eu escrevi um pequeno script Python para procurar um arquivo no instalador usando as informações armazenadas lá:
> 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á disponível aqui:https://github.com/Zero3/windows-installer-file-search
Responder2
Se você concorda em apenas encontrar agulhas plausíveis no palheiro, esse abuso rápido e sujo de7-Zipfuncionará:
7z.exe l -an -air!C:\Windows\Installer\*.msi > needlelist.txt
Em seguida, abra needlelist.txt
em qualquer editor de texto, pesquise needlename.dll
e você encontrará o pacote .msi correspondente nas listagens geradas pelo 7-Zip.
(Observação: este método é 'sujo' porque apenas informa quais pacotes .msi contêm um arquivo chamado needlename.dll
. Mas provavelmente é adequado para a maioria dos casos de uso.)