Dlaczego instalatory Windows (pliki .msi) odinstalowują się znacznie dłużej niż inne instalatory?

31

Od czasów systemu Windows XP instalatory Windows (pliki .msi), w tym instalatory InstallShield (które są tylko bootstrapem dla MSI), odinstalowały aplikację około pięć razy dłużej niż inne instalatory. To samo zwykle dotyczy instalacji.

Dlaczego nadal trwają tak długo i dlaczego ludzie nadal używają MSI do instalacji? Na przykład:

Odinstaluj VLC - zajmuje około 5 sekund.
Odinstaluj XYZ - uruchamia „Przygotowanie do usunięcia ...”, po czym następuje 15 sekundowe opóźnienie.

Wszystko, co robi, to usuwanie plików i czyszczenie rejestru (który może obejmować rejestracje COM), więc dlaczego to trwa tak długo?

Chris S.
źródło
Chcę tylko zauważyć, że jest to prawdą tylko wtedy, gdy (1) wyłączysz funkcję punktu kontrolnego przywracania systemu i (2) jest to gigantyczny instalator (który nie jest unikalny dla Instalatora Windows - widziałem wiele wolnych instalatorów Inno, po prostu dlatego, że są ogromne). Zainstalowałem instalatory Windows i usunąłem się (dosłownie) w kilka sekund. (Na przykład Bootvis instaluje się w moim systemie w 3 sekundy. Odinstalowuje się w tym samym czasie. I nie, mój system też nie płonie szybko.) Różnica polega na tym, że Instalator Windows ma o wiele więcej funkcji, więc większe programy używaj go częściej.
Mehrdad
@ Mehrdad miałeś na myśli (1) włączenie przywracania systemu?
Chris S
Rzeczywiście tak, literówka.
Mehrdad
2
Przybyłem tutaj, ponieważ odinstalowywanie MSI trwało wiecznie ... a tak naprawdę to, że wyskakujące Do you want to allow the following program from an unknown publisher to make changes to this computer?okienko ukrywało się w tle.
Nicolas Raoul,
Zobacz tę odpowiedź, aby uzyskać szczegółowe informacje techniczne dotyczące przyspieszenia instalacji MSI: superuser.com/a/296534/11906
Stein Åsmul

Odpowiedzi:

32

Instalator Windows najpierw systematycznie tworzy punkt przywracania systemu, co jest dość powolną operacją.

Również z artykułu zatytułowanego, odpowiednio, „Instalator Windows jest do bani” , fragment:

Kiedyś instalacja składała się z programu wykonującego i wykonującego kilka prostych kroków, aby zainstalować oprogramowanie, a następnie wykonać odinstalowanie w odwrotnej kolejności.

Nie tak działa Instalator Windows. Zamiast uruchamiać program, który po prostu instaluje i pozwala to zrobić, bada stan systemu, następnie bada stan bazy danych, która jest instalatorem programu, a następnie wykonuje serię skomplikowanych obliczeń dotyczących tego, jak je pogodzić.

Wydaje się, że zamiast uruchamiać skrypt instalacyjny, chodzi o rozwiązanie problemu podróżnego sprzedawcy. Dlatego działa tak wolno. A przynajmniej takie jest moje wrażenie.

Dodam też, że instalator Windows przechowuje wszystkie informacje w rejestrze, który nie jest najszybszą bazą danych na świecie.

harrymc
źródło
3
To chyba szybciej niż to, co dpkgwykorzystuje do swojej bazy danych pakietu (choć, co prawda, dpkg nie przechowywać wszystko w nim): /var/lib/dpkg/statusjest płaski plik, który wymienia każdy pojedynczy pakiet, który został zainstalowany raz tekst, a nie ponieważ zostały oczyszczone - i ja nawet nie jestem pewien, czy zawsze pomija oczyszczonych.
SamB,
3
dpkgnie okłamuje mnie za pomocą pasków postępu, które mówią „Pozostały czas: 0 sekund” przez dwie minuty, ale…
LawrenceC
20

Instalator Windows ma reputację powolności. Przyczynia się do tego kilka rzeczy, które omówię poniżej. Ale ostatecznie należy zadać sobie pytanie, czy jedna, dwie lub trzy minuty to tak naprawdę kwestia sporna podczas instalowania i odinstalowywania oprogramowania. Zajmuję więcej czasu niż przeglądanie kanałów telewizyjnych :)

Rejestr
Jest to winowajca numer jeden. Instalator Windows intensywnie wykorzystuje rejestr do swoich operacji. W miarę dojrzewania systemu, instalowania i odinstalowywania aplikacji oraz wzrostu rejestru lub jego fragmentacji, MSI będzie wolniejszy. Ta sama aplikacja zainstaluje się i odinstaluje znacznie szybciej w nieskazitelnej instalacji Windows niż w dojrzałym systemie. Rozwiązaniem tutaj jest utrzymanie rejestru w czystości i defragmentacji.

Do czyszczenia rejestru użyj jednego z wielu dostępnych narzędzi. Ale w przypadku defragmentacji rejestru nie mogę zalecić wystarczającej liczby NTREGOPT do wewnętrznej optymalizacji gałęzi i PageDefrag do fizycznej defragmentacji plików.

Powodem, dla którego operacje MSI mogą być wolne w rejestrze, jest to, w jaki sposób MSI z nich korzysta. Instalator Windows używa rejestru do śledzenia, które Produkty zainstalowały, które Składniki i lokalizację, w której został zainstalowany. Oryginalne identyfikatory GUID instalacji są używane w formacie skompresowanym. Informacje o instalacjach dla poszczególnych komputerów można znaleźć pod adresem HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18, natomiast dane dla poszczególnych użytkowników znajdują się obok nich w HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\kluczach SID użytkownika i na kluczach.

Oba te klucze mogą być dość duże i zawierają wiele podkluczy i wartości. Kontrolują Produkty, Komponenty i Ścieżki Kluczowe każdej zainstalowanej aplikacji. Wszystkie te informacje muszą zostać odczytane i przetworzone w celu prawidłowej procedury odinstalowania. Jednak format rejestru zawiera klucze w kolejności alfabetycznej, co pozwala na wyszukiwanie binarne. Ale wartości nie są. Są one zapisywane podczas ich tworzenia, dlatego należy przeprowadzić procedurę wyszukiwania liniowego. Co spowalnia działanie algorytmu.

Podsumowując, MSI jest raczej kompletną i dokładną metodą instalacji i deinstalacji oprogramowania. Ale cierpi z powodu zależności rejestru. System jest doskonały. To rejestr systemu Windows już dawno powinien był zostać przerobiony :)

Aby uzyskać bardziej zaawansowane informacje:
Aby uzyskać dogłębną analizę tego, co robi MSI podczas każdej procedury instalowania lub odinstalowywania, zapoznaj się z tym artykułem wyjaśniającym, jak skonfigurować debugowanie MSI. Lub, dla mniej, ale wciąż cennych informacji, ten jak aktywować rejestrowanie.

Krasnolud
źródło
4
Ponadto, o ile mi wiadomo, MSI wykorzystuje transakcje do wszystkiego, co robi, więc zawsze może wykonać prawidłowe wycofanie w przypadku niepowodzenia operacji. Prawdopodobnie nie wpływa to również na szybkość, ale jest bardzo istotne dla integralności danych. (Przestałem liczyć, jak często muszę czyścić po awarii instalatora NSIS -.-)
Joey,
W tej chwili instaluję OpenOffice i
minęła
Bardzo informujące. Wydaje mi się, że w moich logach msi często pojawiają się błędy „Nie można utworzyć punktu przywracania” (może osiągnięto cytowanie punktu przywracania?), Więc tworzenie punktów przywracania nie ma szansy na utratę czasu instalacji. Niezależnie od tego, moje czasy instalacji są nadal wolne, a jeśli wyszukiwanie wartości jest tak powolne, jak mówisz, przypuszczam, że nie ma żadnego powodu ze strony Microsoftu, aby zapewnić dodatkową implementację dodatkowych informacji o liście / węźle w specyfikacji binarnej rejestru, aby uzupełnij wyszukiwanie binarne.
chaz
> Ale ostatecznie należy zadać sobie pytanie, czy jedna, dwie lub trzy minuty to tak naprawdę kwestia sporna podczas instalowania i odinstalowywania oprogramowania. Tak.
Alexei Averchenko
6

Instalator Windows ma wiele dużych zalet dla wdrożenia korporacyjnego , niektóre z nich opisałem tutaj: https://serverfault.com/a/274609/20599

Duża część powolności sesji Instalatora Windows wynika z jego możliwości wycofywania . Po pierwsze, tworzy punkt przywracania przed instalacją lub odinstalowaniem (pod warunkiem, że przywracanie systemu nie zostało wyłączone). Następnie wykona kopię zapasową wszystkich plików, których dotyczy problem, zarówno podczas deinstalacji, jak i instalacji, aby zapewnić przywrócenie systemu do pierwotnego stanu w przypadku wystąpienia błędu.

Kolejnym czynnikiem jest to, że wszystkie składniki MSI zostaną zarejestrowane w rejestrze . Obejmuje to pewne koszty ogólne .

W przypadku skompilowanych plików MSI potrzeba również trochę czasu na wyodrębnienie plików instalacyjnych .

Zobacz tę odpowiedź, aby uzyskać szczegółowe informacje techniczne dotyczące przyspieszenia instalacji MSI .

Stein Åsmul
źródło
3

Instalatory Windows są tak często używane z wielu powodów - integracji systemu operacyjnego, zasad bezpieczeństwa, instalacji nienadzorowanych i wielu innych.

Najczęstszym powodem, dla którego mogę wymyślić, są nienadzorowane instalacje i dystrybucje sieciowe. Duże korporacje mogą łatwo dystrybuować aplikacje, umieszczając plik .MSI na dysku sieciowym, a następnie po prostu wywołując plik wsadowy (lub aplikację kreatora dystrybucji) na zdalnym komputerze, aby zautomatyzować proces instalacji.

Chociaż poza plikami .MSI istnieją inne opcje, istnieją pewne unikalne funkcje, które integrują się z większością wersji systemu Windows , których nie ma wiele innych instalatorów.

I właśnie dla tego wiesz - InstallShield nie zawsze jest nakładką na pliki MSI. Mają także własne autorskie rozwiązanie instalacyjne.

Przełom
źródło
1
Pytanie dotyczyło tego, dlaczego MSI zajmuje tak dużo czasu, aby zrobić coś w porównaniu z czystymi instalatorami .exe.
grawity
5
Z pytania ... „i dlaczego ludzie nadal używają MSI do instalacji?”
Przełom
@grawity: technicznie rzecz biorąc, instalatory msi mogą być również pakowane w pliki exe, ale to prawdopodobnie rozdziela włosy.
music2myear