Anwendungen, die einen MSI Installer für die Installation mitbringen sind in der Regel einfach zu paketieren und zu verteilen. Komplizierter wird es da schon, wenn man nur bestimmte Features aus den MSI Quellen heraus installieren darf. Dieser Artikel beschreibt die Herangehensweise und die Umsetzung solch einer Anforderung anhand der Anwendung Git Extensions.
Für die Umsetzung benötigt man ein Tool zum Auslesen von MSI Dateien, zum Beispiel das Microsoft Orca Tool enthalten im Windows (7) SDK, oder SuperOrca.
Ein „silent“ MSI Installationsaufruf kann wie folgt aussehen:
Msiexec /i GitExtensions246Setup.msi REBOOT=REALLYSUPPRESS /qb-!
Für das Installieren von dedizierten Features müssen zusätzlich noch die MSI Parameter ADDLOCAL und REMOVE verwendet werden.
Weitere Informationen zu diesen beiden Parametern, sowie weiteren Parametern unter http://msdn.microsoft.com/en-us/library/aa367536(v=vs.85).aspx
Als erstes legt man über den Parameter ADDLOCAL=All fest, das alle Features abweichend des Standards bei einer Installation mitinstalliert werden. Über den Parameter REMOVE werden jetzt die Features rausgefiltert, die nicht mitinstalliert werden sollen.
Möchte man jetzt am Beispiel von Git Extensions bei der unbeaufsichtigten Installation die Features Extra Application icon und Custom merge scripts nicht mitinstallieren, so öffnet man über das Orca Tool die MSI Datei und wechselt in die Feature Tabelle. In dieser Tabelle befinden sich die Features, die über den MSI Installer installiert werden können. In der dritten Spalte sind die Namen, wie sie auch in der Installer GUI dargestellt werden, aufgeführt.
Jetzt muss man sich nur noch aus der ersten Spalte die dazugehörige Feature-Bezeichnung heraussuchen und dem REMOVE Parameter hinzufügen.
Der „silent“ MSI Installationsaufruf sieht dann wie folgt aus:
Msiexec /i GitExtensions246Setup.msi ADDLOCAL=All REMOVE=Icons,DiffScripts REBOOT=REALLYSUPPRESS /qb-!
Um zu testen, ob die voreingestellte Featureauswahl auch angezogen wird, kann man den Installationsaufruf ohne den Silent Parameter /qb-! aufrufen.