Bartek Szafko

all of the bits and pieces

Instalowanie komponentów zależnych

with 6 comments

image 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:

image

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 :P

Inne podobne artykuły:

Written by Bartłomiej Szafko

Czerwiec 22nd, 2009 at 8:58 pm

Posted in WiX

1 Trackbacks/Pingbacks

  1. Bartek Szafko » WiX: Merge modules

with 6 comments to “Instalowanie komponentów zależnych”

Subscribe comments with RSS. TrackBack URL.

  1. Sylwek

    23 cze 09 at 14:02

    Wielkie dzięki za ten artykuł, był mi bardzo pomocny

  2. 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 :)

  3. s_limak

    1 lip 09 at 16:12

    A nie lepiej Bootstrapper Manifest Generator?
    http://code.msdn.microsoft.com/bmg

  4. 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.

  5. 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?

  6. 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.

Leave a Reply