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.
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.
źródło
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.
źródło