Jak dowiedzieć się, do którego pakietu instalacyjnego należy dany plik exe / dll


11

Chciałbym wiedzieć, co MSI zainstalowało dll lub exe w moim systemie. Wiem, że Windows naprawia usunięte pliki, jeśli należą one do zainstalowanego pakietu. Czy mogę zapytać o te informacje bez usuwania pliku? Czy istnieje narzędzie lub interfejs API Win32, aby sprawdzić, do którego pakietu należy plik?

Odpowiedzi:


7

Wygląda na to, że w końcu może być jakiś sposób! Niedawno odkryłem wpisy rejestru dotyczące plików instalowanych przez Instalatory Windows w następującym poddrzewie:

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

Napisałem mały skrypt w języku Python, aby wyszukać plik instalatora za pomocą przechowywanych tam informacji:

> 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

Jest dostępny tutaj: https://github.com/Zero3/windows-installer-file-search


Łał. 2,5 roku później przybiłeś to pytanie. Patrząc na to poddrzewo, teraz rozumiem, dlaczego uruchomienie systemu Windows zajmuje tyle czasu. Należy to zindeksować w pamięci, aby funkcja „Twoja aplikacja była uszkodzona, włóż dysk”, aby działała przy każdym uruchomieniu aplikacji.
— wigy

6

Jeśli nie masz nic przeciwko znalezieniu prawdopodobnych igieł w stogu siana, to szybkie i brudne nadużycie 7-Zip zadziała:

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

Następnie otwórz needlelist.txtw dowolnym edytorze tekstu, wyszukaj, needlename.dlla znajdziesz odpowiedni pakiet .msi w listach wygenerowanych przez 7-Zip.

(Uwaga: ta metoda jest „brudna”, ponieważ informuje tylko, które pakiety .msi zawierają plik o nazwie needlename.dll. Ale prawdopodobnie jest odpowiednia w większości przypadków.)


Rzeczywiście, jest to sprytne nadużycie 7-Zip. Czy instalator zawsze kopiuje plik MSI do tego folderu C: \ Windows \ Installer, czy jest to tylko konwencja, którą można obejść? Nadal czekam na elegancki interfejs API Win32, zanim zaakceptuję fakt, że nie ma innego wyjścia (i zaakceptuję twoją odpowiedź).
— wigy

Instalator Windows AFAIK zawsze buforuje zainstalowane pliki MSI w folderze (patrz także superuser.com/questions/473569/… ). Powód jest logiczny: instalator jest również dezinstalatorem. System Windows potrzebuje zatem kopii dezinstalatora w znanej lokalizacji, aby wykonać go, gdy użytkownik chce odinstalować aplikację. Ponieważ oryginalny plik MSI został prawdopodobnie usunięty przed wiekami, system Windows zapisuje kopię podczas instalacji.
— Zero3,

Odnośnie interfejsu API: W przeciwieństwie do większości dystrybucji Linuksa (i tym podobnych), system Windows (przynajmniej wcześniejszy niż Windows 8) nie ma wbudowanego odpowiedniego systemu zarządzania pakietami w systemie operacyjnym, zdolnego do wysyłania zapytań o takie rzeczy. Prawdopodobnie można by to zrobić, uruchamiając wszystkie zainstalowane pliki MSI i wyszukując w nich plik docelowy (zasadniczo moja odpowiedź została zaimplementowana poprawnie), ale nie wydaje się, aby została zaimplementowana od razu po wyjęciu z pudełka. Oczywiście mogę się mylić.
— Zero3,

Cóż, akceptuję to jako odpowiedź. Chociaż nie możemy udowodnić, że nie ma do tego interfejsu API Win32, miałem wrażenie, że MSI w jakiś sposób podłączyło się do procesu ładowania bez odpowiedniego publicznego interfejsu API.
— wigy
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.