|
Daniel Espendiller - 2010 |
Server Links |
MSI-Setuppaket mittels SharpDevelop WiX erstellen
Zum Verteilen von Anwendungen gibt es ziemlich viele Lösungen, welche zum Teil richtig Geld kosten. Für relative kleine Entwicklungen wie zum Beispiel .NET Addins finde ich es etwas überdimensoniert.
Wobei .NET Addins wiederum im System gesondert registriert werden müssen. Hier gibt es leider bisher keine gute alternative, selbst die Visual Studio komplett Version bietet hier kein einfache Lösung.
Nun bin ich auf SharpDevelop (Open-Source Alternative zu Visual Studio) aufmerksam geworden, womit Setup Projekte mittels WiX erstelllt werden können. Ich zeige kurz auf wie man ein MSI-Paket erstellt, welches dann unter Windows x64 und x86 genutzt werden kann. ACHTUNG: MSI-Pakete müssen für beide System gesondert kompliert werden, eine MSI für beide System ist nicht möglich.
Neues Projekt erstellen
Wir starten also mit einem neuen Setup-Projekt - WixUI Minimal dadurch sind bereits diverse Grundeinstellungen eingerichtet. Da wir eine reine MSI Dateie wollen, die per Softwareverteilung installiert werden kann, brauchen wir kein GUI.
Damit überhaupt das Paket kompiliert wird, müssen wir nach Erstellung des Projektes die Grundinfo anpassen. Name, Manufacturer und Description müssen ausgefüllt werden.
Dateien hinzufügen
Innerhalb des Projektes liegt durch die Vorlage bereits eine Datei names license.rft bereit. Diese können wir getrost löschen. Wir sollten uns aber vorher mal die Strukturen genauer ansehen. Alle Dateien werden innerhalb einer Files.wxs "abgelegt". Dort sind Komponenten für jede Datei vorhanden, die wiederum in Verzeichnissen liegen.
Durch aufrufen von Ansicht > Setup > Dateien können wir uns Dateien und Verzeichnisse hinzufügen
Ich möchte alle meine Programmdatei unter: %ProgramFilesFolder%\Inventor-Addins\PrintButtons liegen haben. Also müssen wir uns eine Ordner Struktur wie folgt anlegen:
Nachdem erstellen eines Unterordner fügen wir den unseren eigentlichen Programmordner mit den Dateien ein. Dieser Ordner braucht dann die Id INSTALLDIR, dadurch definieren wir logischerweise den Zielordner für die Installation
Dateien in Features
Nun kommen wir zum ekelhaften Teil: Wir müssen alle Komponenten innerhalb der Dateien Files.wsx in ein Feature in setup.wsx eintragen, damit die Dateien auch mitinstalliert werden.
Somit wäre das Paket eigentlich fertig zum kompilieren.
x86 und x64 MSI
Da wir ein Paket für x86 und x64 erstellen wollen und hierbei nicht extra unterschiedliche Projekte pflegen wollen, brauch wir ein paar Variablen, welche die unterschiedlichen Pfade für die unterschiedlichen Systeme bereitstellt.
Wir wechseln also in die Datei Files.wsx und fügen im oberen Bereich eine Variablen, ein die je nach System einen anderen Pfad besitzt
<!-- set our ProgrammFilesFolder depending on x64 or x86 build http://www.mail-archive.com/wix-users@lists.sourceforge.net/msg01750.html http://n2.nabble.com/using-a-variable-for-Component-Win64-attribute-value-still-generating-generic-warning-not-uniquely-sd-td1515820.html !--> <?if $(var.Platform) = "x64" ?> <?define ProgramFilesFolderHelper="ProgramFiles64Folder"?> <?else?> <?define ProgramFilesFolderHelper="ProgramFilesFolder"?> <?endif?>
Damit die Variable genutzt werden kann müssen wir natürlich noch unsere Zielverzeichnis abändern:
<Directory Id="$(var.ProgramFilesFolderHelper)" Name="PFiles">
Wenn man es nicht direkt in der XML-Datei gemacht habt, kann man die Änderungen auch über das GUI machen:
Startkonditionen
Über Startkonditionen kann die Installation abbgerechen werden sobald eine bestimmte Konstellation zutrifft. Ich halte ich es nicht für sinnvoll, dass ein x86 Paket innerhalb eines x64 System installiert werden kann. Wodurch Programme (x86) oder ähnlich zustande kommt. Weiterhin macht es für ein Addin kein sein, wenn es für beide System unterschiedlich ins System eingetragen wird. Wir fügen also folgende Zeile innerhalb der Setup.wsx ein:
<!-- dont install a x86 build on a x64 system --> <?if $(var.Platform) = "x86" ?> <Condition Message="This is a x86 package which cannot be installed in 64-bit Windows. Please use the 64-bit package">Not VersionNT64</Condition> <?endif?>
x64 Build Umgebung
Stellen wir nicht extra ein, dass wir ein Paket für x86 erstellen wollen, so wird immer ein x86 Paket erstellt. Wir müssen also einstellen, dass wir für x64 kompilieren. Das geht übrigens nur, wenn wir auch an einer 64-Bit Windows Installation sitzen, sonst können wir einstellen was wir wollen. Es ist nicht möglich unter 32-Bit eine 64-Bit MSI Datei mit SharpDevelop zu erstellen.
Weitere Infos
Nun können wir das Paket "hoffentlich" ohne Fehler kompilieren. Um eine .NET DLL mittels WiX im System zu registrieren müssen wir heat.exe nutzen. Eine Anleitung auf Basis dieses Artikels ist hier zu finden: Setuppaket für .NET Addins erstellen und registrieren (regasm)













