2009-11-05 3 views
1

Je dois définir un composant de fichier Wix qui peut ne pas exister dans certaines circonstances. Est-ce qu'il y a un moyen de faire ça? Les éléments de condition dans Wix semblent tous fonctionner au moment de l'installation, et j'ai besoin de quelque chose qui détectera au moment de la compilation si un fichier est présent et construira l'installateur en conséquence.WiX: Définir un composant de fichier qui n'existe peut-être pas

Répondre

1

Comme je l'ai dit, preprocessor variables est votre ami! Cependant, l'exemple de iwo peut (et va) enfreindre les règles des composants, car le composant n'est pas 'stable'. Mieux vaut conditionner un composant entier (ou groupe de composants) ...

<?if $(var.releasetype)=full ?> 
    <ComponentRef Id="Somefile.dll" /> 
<?elseif $(var.releasetype)=enterprise ?> 
    <ComponentGroupRef Id="SomethingElse" /> 
<?endif?> 

Et puis inclure les Component et ComponentGroup s dans Fragment séparés balises afin qu'ils ne seront compilés en référence :)

<Fragment> 
    <Component Id="Somefile.dll" Guid="*"> 
    <File Id="Somefile.dll" KeyPath="yes" Source="SourceDir\Somefile.dll" /> 
    </Component> 
</Fragment> 

<Fragment> 
    <ComponentGroup Id="SomethingElse"> 
    <ComponentRef Id="Somefile.dll" /> 
    <Component Id="AnotherFile.dll> 
     <File Id="AnotherFile.dll" KeyPath="yes" Source="SourceDir\AnotherFile.dll" /> 
    </Component> 
    </ComponentGroup> 
</Fragment> 

Personnellement, j'utilise nant pour appeler candle et light cibles, définissant différentes variables pour différents builds et produits, l'utilisation efficace des fragments et des variables de préprocesseur fournit une grande opportunité pour la réutilisation de code entre les projets, ou divers re baux du même projet.

Dans votre cas, pour vérifier si un fichier existe ... vous utiliseriez simplement les fonctions internes pour définir ou redéfinir une variable qui sera ensuite transmise à WiX. par exemple:

<if test="${not file::exists('something.dll')}"> 
    <property name="releasetype" value="blahblahblah" /> 
</if> 
+0

J'ai résolu mon problème. Merci. – nagul

2

Il semble que vous deviez vérifier le préprocesseur wix. Consultez la documentation de wix sur le sujet: wix preprocessor

par exemple, supposons que vous ayez une variable d'environnement appelée APPTYPE. Si sa valeur est 'Full', alors MyApp_Full.exe sera inclus et traité par le compilateur wix (bougie).

<Component Id='MyComponent1' Guid='fff60f72-5553-4e6b-9bf0-ad62ab9a90b1'> 
<?if $(env.APPTYPE) = Full?> 
    <File Name='MyApp_Full.exe' DiskId='1' Source='..\MyApp_Full.exe' Vital='yes' /> 
<?endif?> 
... 
</Component> 

Il y a plus! Variables, définit, conditionnelles. Consultez cette page de documentation.

Questions connexes