Instalowanie komponentów zależnych

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 😛

12 thoughts on “Instalowanie komponentów zależnych

  1. Sylwek says:

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

  2. Dawid Węgrzyn says:

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

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

    Jak ustawić kolejność instalacji komponentów zależnych w bootstraperze generowanym przez WiX?
    Czy istnieje możliwość nadania innej kolejności niż alfabetyczna?

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

  7. […] W większości przypadków można zupełnie spokojnie użyć jakiegoś bootstrappera i instalować normalnie pliki .msi na przykład tak jak to opisałem w jednym z poprzednich wpisów. […]

  8. Jacek says:

    Jakie parametry należy podać w sekcji , aby zainstalować SQL Server 2008 Express ??

  9. Niestety to nie jest bardzo prosta sprawa, wymaga paru kroków, między innymi trzeba się upewnić, że jest wpierw zainstalowany PowerShell, windows ma odpowiedni poziom SP – minimalnie SP2 dla windows xp.

    Zostało to opisane bardzo fajnie tutaj: http://youarenotexpectedtounderstandthis.blogspot.com/2009/08/vsnet-2008-prerequisite-for-sql-server.html nie sprawdziłem tego osobiście ale powinno zadziałać.

  10. Marcin says:

    Czy da się sprawdzić, czy dany komponent jest już zainstalowany np.: po kluczu rejestru i oczywiście doinstalować go w razie potrzeby, przy założeniu, że jest to jakaś niestandardowy komponent np.: jakiś Player lub sterowniki, a nie jeden z listy (http://bp3.blogger.com/_BMqv0aL-z_Y/RiXmOcKj1KI/AAAAAAAAABA/luWxByLjFTA/s1600-h/bootstrapper_prereq_dialog.png)?

  11. Grzegorz Wiśniewski says:

    Witaj, piszesz że używasz narzędzia iexpress – mam z nim pewne problemy. Otóż przy tworzeniu archiwum samorozpakowującego i po rozpakowaniu wszystkiego do tempa widzę, że straciłem strukturę plików (wszystko w jednym katalogu) i nazwy w formie znanej z DOSa 🙂 Używasz jakiś specjalnych ustawień iexpress i gdzie je ustawiasz?

  12. o ile pamiętam ( wpis pisałem 2 lata temu ) nie miałem większych problemów z iexpress.

    możesz spróbować użyć jakiegoś innego pakowacza, który robi samorozpakowujące się exeki – np 7zip.

Leave a Reply

Your email address will not be published. Required fields are marked *