Jak mogę porównać zawartość dwóch (lub więcej) plików MSI?

2

Jak mogę „ porównać zawartość ” dwóch (lub więcej) plików MSI i zobaczyć, co tak naprawdę różni się w tych plikach - zamiast robić bezużyteczne porównanie binarne ? (co oczywiście mówi mi tylko, jeśli mam do czynienia z kopiami tego samego pliku, czy nie).

Stein Åsmul
źródło

Odpowiedzi:

2

Pliki MSI

Plik MSI zawiera prymitywną bazę danych MS SQL osadzoną w pliku pamięci o strukturze COM (system plików w pliku ze strumieniami pamięci różnych typów - stary format MS Office COM / OLE).

Możesz wyodrębnić pliki z MSI lub faktycznie dekompilować cały MSI ze wszystkimi jego strumieniami. Każde podejście jest krótko opisane poniżej.

Przy dekompilacji (prawie) możliwa jest pełna przezroczystość, z wyjątkiem skompilowanych akcji niestandardowych (zwykle napisanych w C / C ++). Zarządzany, skompilowany kod (C #) może być (teoretycznie) dekompilowany.

Aby określić (z grubsza), co faktycznie wykonuje niestandardowa akcja „czarnej skrzynki”, możesz przechwycić instalację MSI za pomocą narzędzia do przepakowywania - które skanuje system przed i po instalacji, wymieniając wszelkie zmiany - widzisz, co się stało, ale nie sposób zdarzyło się. Bardzo niewiele osób potrzebuje takiego poziomu kontroli.

Tylko porównanie plików

To stare wiadomości, ale jeśli chodzi tylko o porównanie plików osadzonych w MSI / setup.exe , możesz użyć instalacji administracyjnej, aby wyodrębnić pliki osadzone w MSI / setup.exe, a następnie użyć dowolnego narzędzia do porównywania plików aby porównać pliki wyodrębnione dla każdej wersji:

  • setup.exe /a
  • msiexec.exe /a "MySetup.msi"

Jeśli MSI nie ma odpowiedniego GUI umożliwiającego interaktywne określenie folderu wyjściowego, możesz spróbować go określić za pomocą wiersza polecenia:

  • msiexec.exe /a "MySetup.msi" TARGETDIR="C:\MyOutputFolder

Pliki Setup.exe zawierające osadzone pliki MSI mogą być różnego typu, niektóre wskaźniki:

Zasadniczo instalacja administracyjna wyodrębnia pliki instalatora z osadzonych plików CAB w samym MSI (CABS może być również zewnętrzny) i wysyła je w schludnej strukturze folderów, która z grubsza odzwierciedla ich zamierzone docelowe miejsca docelowe podczas instalacji. W MSI można zastosować kilka form kompresji - wszystkie obsługiwane przez instalację administracyjną. Proszę nie rozpakowywać plików MSI !

Na koniec Media tabledostosowuje się do korzystania z wyodrębnionych plików źródłowych zamiast wewnętrznych plików CAB - a wewnętrzne pliki CAB są usuwane, co potencjalnie czyni wyjściowy plik MSI znacznie mniejszym niż oryginał. Co najważniejsze, wszelkie podpisy cyfrowe są usuwane .

Kiedyś pliki MSI były buforowane przy %SystemRoot%\Installerusuwaniu plików CAB (co czyni je małymi), ale teraz są buforowane w pełnym rozmiarze, co potencjalnie może znacznie zwiększyć wymagania dotyczące pamięci. Korzystanie z instalacji administracyjnych jest sposobem na zmniejszenie tego rozmiaru pamięci podręcznej (za karą za usunięcie podpisów cyfrowych). Więcej informacji na ten temat: Dlaczego MSI wymaga oryginalnego pliku .msi, aby kontynuować odinstalowywanie?

Więcej informacji na temat instalacji administracyjnych tutaj:


„Porównywanie treści MSI”

Jeśli chcesz bardziej szczegółowo określić, co różni dwa pliki MSI (na przykład wersję 1 i 2 pakietu), możesz bardziej zaangażować się przy użyciu odpowiedniej przeglądarki plików MSI lub dekompilatora MSI .

Napisałem napis na stackoverflow.com na temat porównywania plików MSI . Zasugerowano mi dodanie linku tutaj na serverfault.com do tej zawartości. Może jest to pomocne dla administratorów systemu.

Nie chcę mieć problemu z dwoma źródłami, więc po prostu połączę się z wersją stackoverflow (mam nadzieję, że jest to w porządku): Jak mogę porównać zawartość dwóch (lub więcej) plików MSI? W tej odpowiedzi wymieniono kilka narzędzi (zarówno bezpłatnych, jak i komercyjnych), które mogą pomóc w wykonaniu „prawdziwego porównania”.

dark.exeSzczególnie interesujące mogą być zaawansowane możliwości dekompilacji MSI z zestawu narzędzi WiX . Oprócz dekompilacji plików MSI w połączonej zawartości opisano również, jak dekompresowaćsetup.exepliki utworzone za pomocą zestawu narzędzi WiX (funkcja bootstrapper, która może instalować kolejno kilka plików MSI i osadzone pliki EXE). Dekompresowana zawartość może z kolei zostać zdemontowana przez ten samdark.exeplik (pod warunkiem, że są to pliki MSI).

Pozwól mi również wrzucić link do obsługi plików setup.exe utworzonych za pomocą innych narzędzi do wdrażania .

Stein Åsmul
źródło