Tvorba instalačních balíčků pro korporace je možná v několika formátech. Relativně velké množství společností však trvá na tom, aby byl použit „nativní“ formát Windows installer i v případech, kdy se ve skutečnosti jedná o sadu produktů. který však zadavatel považuje za jeden produkt.
Setkávám se tedy s dotazy, nebo požadavky na konzultaci, jak řešit situaci, kdy je nutné vytvořit jeden balíček, který se technicky skládá z více MSI balíčků. To je technicky řešitelné, ale má to svoje omezení.
Jediné funkční řešení je použít BootStraper, nebo si napsat vlastní aplikaci, která bude postupně spouštět instalaci jednotlivých balíčků.
Technologie/služba Windows Installer z principu nedovoluje současný běh více instalací založených na engine Windows Installer.
V jednom okamžiku může běžet pouze jedna instalace založená na technologii Windows Installer (MSI).
Windows Installer pro tyto případy používá mutex, kterým oznamuje systému, že běží nějaká instalace a další instalátory se pak dozví, že nemohou běžet. Z tohoto důvodu občas vznikají konfliktní situace, kdy běží nějaká aktualizace Windows, využívající ještě Windows Installer a blokuje instalaci balíčku, kterou jste spustili ručně.
Jaký je tedy závěr? Pokud chcete mít instalační balíček pro hromadný deployment, složený z více komponent využívající MSI balíčky, není možné takový balíček vytvořit jako funkční. Tedy nelze vytvořit MSI balíček, volající další MSI balíčky (nested packages).
Tuto informaci najdete také v oficiální dokumentaci pro Windows Installer:
Concurrent Installations, also called Nested Installations, is a deprecated feature of the Windows Installer. … Do not use concurrent installations to install products that are intended to be released to the public.
Toto lze řešit jedině skrze Bootstraper, tedy aplikaci, která pak zajistí postupné spouštění instalace jednotlivých balíčků samostatně.
Odkazy
- Windows Installer – Concurrent Installations (anglicky)
- Mutual exclusion (anglicky)