En passant des paramètres de conception pour .wxs fichier à construire, de façon dynamique wix installateurs
Je suis un étudiant développeur et j'ai construit plusieurs installateurs pour la société, je travaille avec maintenant. Donc, je suis assez familier avec WIX.
Récemment, nous avons décidé d'avoir un serveur de Build que auto construit notre solution. Il s'appuie à la fois debug et release, ainsi que d'Obfuscation (et non crypté) des projets.
Et vous n'avez pas vraiment à comprendre tout cela. Tout ce que vous avez à comprendre, c'est que j'ai le même Wix projet de construction différentes Msi dynamiquement.
Donc, la façon dont nous construisons est nous appelons MSBuild.exe avec plusieurs paramètres. Les paramètres de la wix projet dépend.
Donc, disons-nous aller dans l'invite de commande et d'écrire
C:\>\windows\Microsoft.NET\Framework\v3.5\MSBuild.exe MyApp.Install\MyApp.Install.wixproj /p:Configuration=Release /p:SpecialPath=Obfuscated /t:Build
L'idée est que wix voit le "SpecialPath paramètre" être affecté "Obfuscation"; et dans le programme d'installation de chemins de sa source à
..\myApp\bin\$(var.SpecialPath)\myApp.exe
qui se traduit par ..\myApp\bin\Obfuscated\myApp.exe
lors de la construction.
TheQuestion
Comment voulez-vous créer des construire des paramètres et de les transmettre à mon .wxs fichier. Maintenant avec ce de l'installation, $(var.SpecialPath)
n'est pas défini et l'accumulation CrashSplosions.
Pour d'évidentes raisons de droit, j'ai dû couper 90% du projet.wxs fichier et renommer certaines choses, mais pour toutes fins utiles, c'est ce que j'ai.
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="myApp" Language="1033" Version="$(var.Version)" Manufacturer="myApp" UpgradeCode="$(var.UpgradeCode)">
<Package Id="*" InstallerVersion="200" Compressed="yes" />
<Media Id="1" Cabinet="media.cab" EmbedCab="yes" />
<Directory Id="TARGETDIR" Name="SourceDir" >
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLLOCATION" Name="myApp">
<Component Id="myAppEXE" Guid="FD5EBC02-MY29-GUID-ACCA-61324C5F1B68">
<RegistryKey Root="HKLM" Key="Software\MyApp">
<RegistryValue Value="0" Type="string" KeyPath="yes"/>
</RegistryKey>
<File Id="MYAPPEXE" Name='myApp.exe' Source="..\myApp\bin\$(var.SpecialPath)\myApp.exe" />
</Component>
<Component Id="EngineDLL" Guid="*">
<File Id="ENGINEDLL" Name='Engine.dll' Source="..\myApp\bin\$(var.Configuration)\Engine.dll" />
</Component>
<Component Id="CommonDLL" Guid="*">
<File Id="COMMONDLL" Name='Common.dll' Source="..\myApp\bin\$(var.Configuration)\Common.dll" />
</Component>
</Directory>
</Directory>
</Directory>
<Feature Id="ProductFeature" Title="myApp" Description='All' Display='expand' Level="1" ConfigurableDirectory='INSTALLLOCATION'>
<ComponentRef Id="myAppEXE" />
<ComponentRef Id="EngineDLL" />
<ComponentRef Id="CommonDLL" />
</Feature>
</Product>
</Wix>
Vous devez vous connecter pour publier un commentaire.
Comme déjà répondu, vous avez besoin de passer les variables en WiX. Nous utilisons Nant au lieu de MSBuild, mais le concept reste le même.
Voici un Nant exemple en passant une demi-douzaine de variables à la bougie (c'est pas le plus propre exemple, mais est levé mot à mot à partir d'un projet, j'ai travaillé sur)
La raison qu'il ne fonctionne pas pour vous, c'est que vous êtes réglage des propriétés msbuild sur la ligne de commande, qui ne sont pas passé à travers comme wix variables. MSBuild propriétés et wix variables sont deux concepts différents.
Un moyen de résoudre ce problème est d'ignorer le concept de msbuild propriétés et l'utilisation des variables d'environnement pour transmettre des valeurs directement à
candle.exe
. Vous pouvez utiliser des variables d'environnement dans votre wxs fichier comme ceci:Vous pouvez alors lancer votre programme d'installation de construire à partir d'un fichier de commandes qui prépare les variables d'environnement nécessaires comme ceci:
Alternativement, si vous préférez passer des paramètres via des propriétés msbuild, vous devez d'abord prendre un coup d'oeil à la msbuild bougie tâche de la documentation. Il montre que vous pouvez définir des valeurs dans votre wixproj fichier comme ceci:
Cela nécessite encore à vous de coder en dur des valeurs dans le wixproj le fichier si. Si vous souhaitez passer les valeurs des propriétés msbuild sur la ligne de commande, alors vous devriez probablement faire quelque chose comme ceci:
puis passer
/p:value1=foo /p:value2=bar
sur la ligne de commande, ou de définir ces propriétés msbuild ailleurs.J'ai eu une situation similaire, où le chemin de la source des fichiers a être passé comme argument de ligne de commande du script de construction. C'est ce que j'ai fait:
Édité le wixproj fichier et ajouté le contenu suivant dans le "PropertyGroup" nœud:
où R: par défaut est le répertoire/chemin d'accès de l'endroit où pour choisir la source.
Maintenant, la source peut également être passé comme argument de ligne de commande lors de la construction: