Dlaczego Instalator Windows może instalować tylko jeden program na raz?

10

Zawsze zastanawiałem się, dlaczego Instalator Windows pozwala instalować tylko jeden program na raz. Bardzo frustrujące jest to, że nie można uruchomić wielu instalacji, zwłaszcza podczas konfigurowania nowej instalacji systemu Windows. Jaki jest tego powód?

Rytis
źródło

Odpowiedzi:

6

Zagwarantowanie poprawności byłoby bardzo skomplikowane w przypadku jednoczesnych instalacji - przy założeniu, że współdzielą one niektóre pliki. Wymagałoby to jakiejś formy transakcji.

  • Musisz zablokować pliki
  • Powinna istnieć możliwość cofnięcia zmian pośrednich, jeśli instalacja się nie powiedzie (nie jesteś pewien, czy jest to teraz możliwe?)

Pojęcia te są znane z baz danych transakcyjnych - ale temat nie jest trywialny i zwykle w systemach plików nie można znaleźć w pełni infrastruktury transakcyjnej (nawet jeśli systemy plików kronikowania to zapewniają). Jednym z problemów jest to, że wiele blokad może doprowadzić do impasu - wtedy potrzebujesz wykrycia impasu (lub obaj instalatorzy zawieszą się na zawsze) i sposób na rozwiązanie tego problemu. Można uniknąć zakleszczeń (np. Zawsze blokując pliki w tej samej kolejności), ale są też inne problemy:

Jeśli zablokujesz wszystkie wymagane pliki z góry, uzyskasz efektywnie to, co masz: jeden instalator musi poczekać, aż drugi się zakończy. Jeśli nie zablokujesz wszystkich wymaganych plików z góry i będziesz kontynuować, ryzykujesz, że „transakcja” się nie powiedzie. Oznaczałoby to, że jeden z instalatorów musiałby zostać zrestartowany.

Wtedy możesz pomyśleć o poziomach izolacji transakcji - aby być w pełni poprawnym, Twoje transakcje musiałyby być możliwe do serializacji” - ale to nie jest łatwe, nawet w przypadku wielu baz danych.

Mogą istnieć nawet alternatywne strategie radzenia sobie z problemami, które omijają pełną izolację, ale zwykle trudniej jest udowodnić ich poprawność.

Uważam, że przy równoczesnej instalacji mielibyśmy o wiele trudniejsze problemy poinstalacyjne - szczególnie dlatego, że nie sądzę, aby producent systemu operacyjnego (lub dystrybucja) przeszedł wszystkie trudy, aby był w 100% czysty. Dlatego wolałbym go nie używać, nawet gdyby był oferowany przez system operacyjny.

Uwaga

Ale może tak naprawdę nie chcesz instalować „w tym samym czasie”. Może wystarczyłoby, gdyby można było ustawić w kolejce instalacje, które są następnie wykonywane jedna po drugiej (najlepiej bez zadawania żadnych pytań pomiędzy nimi). I to jest naprawdę coś, niektóre inne systemy operacyjne (dystrybucje) radzą sobie znacznie lepiej.

Chris Lercher
źródło
1
Choć poprawna, ta odpowiedź wydaje mi się zbyt szczegółowa. Ktoś pytający, dlaczego usługa instalatora działa w ten sposób, prawdopodobnie nie zrozumie tej odpowiedzi.
gWaldo
2
@ gWaldo: Dobra, może masz rację ... Z drugiej strony nie chcę po prostu powiedzieć: „To skomplikowane, uwierz mi (kropka). I tak byś tego nie zrozumiał”. Może OP (lub ktoś inny natknie się na to pytanie) jest naprawdę zainteresowany, a odpowiedź, która dotrze do sedna problemu, pomoże mu oszacować, czy naprawdę jest dużo złożoności, aby rozwiązać coś, co wygląda tak łatwo na jego temat powierzchnia. Kto wie?
Chris Lercher
Bardzo prawdziwe. Trafne spostrzeżenie.
gWaldo
Chociaż wszystkie rozmowy na temat izolacji wydają się wiarygodne, możesz uruchomić wiele instalatorów, jeśli nie używają one środowiska Instalatora Windows. Nigdy nie miałem zepsutego, gdy biegną obok siebie ... Może mam szczęście :) Jeśli chodzi o kolejkowanie instalacji, istnieją do tego narzędzia, ale biorąc pod uwagę procesory wielordzeniowe (cholera, procesory stacjonarne mogą teraz obsługiwać 8 wątków ...), wydaje się, że równoległe ich ułożenie byłoby odpowiedzią (choć nadal mogą walczyć o wejścia / wyjścia).
Rytis
2
@Rytis: Chciałbym mieć takie samo szczęście :-) - Instalatory psuły się losowo, nawet bez ich jednoczesnego uruchamiania. Informacje o multicores: istniałby inny sposób ich wykorzystania: przy użyciu wielu rdzeni w ramach jednego procesu instalacji. To wciąż nie zawsze jest możliwe lub łatwe, ale można je lepiej koordynować. Ogólnie myślę, że największym oszczędzaniem czasu jest nadal, jeśli cały proces instalacji (kolejka) zadaje pytania tylko na początku i na końcu. Następnie możesz dostać kawę lub zrobić coś innego podczas instalacji (i wykorzystać pozostałe rdzenie do wszystkiego, co chcesz zrobić).
Chris Lercher
6

Ma to na celu zaprojektowanie, aby uniknąć sytuacji, w której dwie instalacje będą manipulować tymi samymi plikami / folderami / kluczami rejestru / etc .; prawdopodobnie można było to zrobić na różne sposoby, ale Microsoft dokonał tego wyboru.

Massimo
źródło
Jakieś odniesienia na poparcie twojego roszczenia?
Aaron Digulla
1

Możesz wykopać kilka plików MSI, aby zainstalować je w szybkiej kolejności, jeden po drugim, za pomocą pliku wsadowego. Nie można jednocześnie uruchamiać dwóch plików MSI w tym sensie, że oba zapisują jednocześnie na dysk.

Powodem jest to, że część instalacji MSI jest uruchamiana jako „transakcja” - sekwencja zmian, które są zatwierdzane lub wycofywane w zależności od tego, czy działania na liście transakcji zakończą się bez błędu. Wszystkie muszą zostać zakończone bez błędów, a następnie transakcja zostaje zatwierdzona, w przeciwnym razie nastąpi pełne wycofanie wszystkich zmian. Wynika z tego, że tylko jedna taka transakcja może być aktywna w danym momencie.

Na poziomie technicznym MSI tylko akcje między standardowymi akcjami InstallInitialize i InstallFinalize w InstallExecuteSequence są uruchamiane jako transakcje. Poza tymi działaniami nie powinny wystąpić żadne zmiany systemowe, ale czasami pliki MSI są błędnie zaprojektowane do wprowadzania zmian w innych sekwencjach.

Stein Åsmul
źródło