Instalowanie komponentów zależnych
O tym, że można wykryć czy .NET albo dowolny inny pakiet jest zainstalowany pisałem w jednym z poprzednich wpisów. Pisałem również, że z poziomu MSI nie można odpalać instalacji innych pakietów.
Dzisiaj pokaże jak szybko stworzyć bootstrappera do plików MSI. W tym celu będę używał bootstrappera znanego z ClickOnce.
Pierwszym krokiem jest wyedytowanie pliku .wixproj i dodanie następującego kawałka kodu:
<ItemGroup>
<BootstrapperFile Include="Microsoft.Net.Framework.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5</ProductName>
<Install>true</Install>
</BootstrapperFile>
</ItemGroup>
<Target Name="AfterBuild">
<GenerateBootstrapper
ApplicationFile="WixProject3.msi"
ApplicationName="WixProject3"
BootstrapperItems="@(BootstrapperFile)"
OutputPath=".\bin\Debug"
ComponentsLocation="Relative"
Culture="en"
Path="C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper"
/>
</Target>
I to właściwie wszystko! Po uruchomieniu budowania projektu WiX w folderze bin\Debug znajdziemy setup.exe, który po uruchomieniu sprawdzi i ewentualnie zainstaluje .NET 3.5, a później odpali plik WixProject3.msi.
Zawartość folderu bin\Debug wygląda mniejwięcej tak:
zwróćcie uwagę, że wszystkie pakiety od .neta też wylądowały w tym folderze. Stało się tak ponieważ użyłem ComponentsLocation=”Relative”, ale można również ustawić żeby pobierał się z sieci (więcej o GenerateBootstrapperTask).
Teraz całość (oprócz .wixpdb) możemy zapakować, najlepiej jakiś selfextractorem ( ja lubie iexpress ) i ustawić wywołanie setup.exe po rozpakowaniu. Trzeba tylko uważać na rozmiar, gdy jeszcze dorzucimy crystala i sql może być już całkiem spory.
Przedstawione przezemnie rozwiązanie ma pewne niedogodności:
- boostrapper clickonce nie ma polskiej lokalizacji, jednak stosunkowo prosto można to załatwić tłumacząc odpowiednie pliki xml
- w przypadku jakiś niestandardowych (albo własnych) zależności będziemy musieli je dodać, tak żeby były widoczne w deploymencie clickonce we właściwościach projektu. Na szczęście to też można załatwić w miarę szybko.
Miłej zabawy!
PS. Zastanawiam się, czy by nie opowiedzieć o WiX w ramach Speaker Idola na MTS 2009 – jak myślicie warto ? czy temat zainteresuje publikę ? Na pewno warto zwrócić na niego uwagę szerszej publiczności, bo przez sam Microsoft jest traktowany po macoszemu, pewnie dlatego że jest open source
Sylwek
23 cze 09 at 14:02
Wielkie dzięki za ten artykuł, był mi bardzo pomocny
Dawid Węgrzyn
23 cze 09 at 22:04
Super, cały ten Wix coraz bardziej mi się podoba. Dorzucę tylko od siebie, że wyszła już wersja RC
i istnieje także możliwość integracji Wix’a z Visual Studio 2010 beta 1
s_limak
1 lip 09 at 16:12
A nie lepiej Bootstrapper Manifest Generator?
http://code.msdn.microsoft.com/bmg
Bartłomiej Szafko
1 lip 09 at 17:21
To zależy jakie podejście stosujesz. BMG, pozwoliłby Ci dodać własny package MSI jako prerequisite.
BTW z BMG jest trochę problemów przy współpracy VS 2008.
To co prezentuje we wpisie – to uważam, według mnie najwygodniejsza metoda.
qb_k
10 lis 09 at 13:42
Jak ustawić kolejność instalacji komponentów zależnych w bootstraperze generowanym przez WiX?
Czy istnieje możliwość nadania innej kolejności niż alfabetyczna?
Bartłomiej Szafko
10 lis 09 at 13:50
dla ścisłości – w tym wpisie bootstrapper nie jest generowany przez WiXa, ale przez Visual studio(komponent clickonce).
Natomiast z tego co mi wiadomo nie można wymusić kolejności instalowanych komponentów. Jedyne co można to w product.xml samych preequisites użyć RelatedProducts i DependsOnProduct: <RelatedProducts>
<DependsOnProduct Code=”Microsoft.Windows.Installer.3.1″ >
w ten sposób dało by się wymusić – to co jest wymagane zostanie zainstalowane najpierw.
W Burn, na który z niecierpliwością czekam powinno to być o wiele prostsze.