Ich möchte wissen, welches MSI eine bestimmte DLL oder EXE auf meinem System installiert hat. Ich weiß, dass Windows gelöschte Dateien repariert, wenn sie zu einem installierten Paket gehören. Kann ich diese Informationen abfragen, ohne die Datei tatsächlich zu löschen? Gibt es ein Tool oder eine Win32-API, um zu überprüfen, zu welchem Paket eine Datei gehört?
Antwort1
Es scheint, als ob es doch einen Weg geben könnte! Ich habe kürzlich Registrierungseinträge für von Windows Installern installierte Dateien unter dem folgenden Unterbaum entdeckt:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData
Ich habe ein kleines Python-Skript geschrieben, um im Installationsprogramm anhand der dort gespeicherten Informationen nach einer Datei zu suchen:
> 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
Es ist hier verfügbar:https://github.com/Zero3/windows-installer-file-search
Antwort2
Wenn Sie damit zufrieden sind, nur plausible Nadeln im Heuhaufen zu finden, dieser schnelle und schmutzige Missbrauch von7-Zipwird funktionieren:
7z.exe l -an -air!C:\Windows\Installer\*.msi > needlelist.txt
Öffnen Sie es dann needlelist.txt
in einem beliebigen Texteditor, suchen Sie danach needlename.dll
und Sie werden das entsprechende .msi-Paket in den von 7-Zip generierten Listen finden.
(Hinweis: Diese Methode ist „schmutzig“, da sie Ihnen nur sagt, welche .msi-Pakete eine Datei mit dem Namen enthalten needlename.dll
. Für die meisten Anwendungsfälle ist sie aber wahrscheinlich ausreichend.)