2016-02-17 2 views
0

J'ai un bootstrapper avec une interface utilisateur personnalisée, un paquet de 1 msi et quelques prérequis. Ce que je veux faire est de faire la détection des prérequis dans l'interface utilisateur personnalisée, puis remplacer l'une des variables de l'élément bundle pour installer le prérequis ou non.Ordre des actions Bootstrapper

Donc, en gros:

<Variable Name="VCRedist2010SP1_x86" Value="TRUE"/> 
<Chain>  
    <ExePackage Id="VCRedist2010SP1_x86" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes" InstallCommand="/q" 
    SourceFile="E:\Redist\vcredist_2010_SP1_x86.exe" 
    DetectCondition="NOT VCRedist2010SP1_x86"/> 
...  
</Chain> 

Et puis de mon interface utilisateur que je réécrire la variable VCRedist2010SP1_x86. Le problème est que la vérification du DetectCondition se produit avant que j'écrive la variable. Voici le journal:

Condition 'NOT VCRedist2010SP1_x86' evaluates to false. 
Setting string variable 'VCRedist2010SP1_x86' to value 'FALSE' 

La question est de savoir si elle peut travailler comme ça du tout ou dois-je toujours faire la détection à l'intérieur XML avec RegistrySearch, par exemple?

Répondre

0

La raison en est que j'appelle Detect trop tôt dans le processus, je dois l'appeler plus tard et faire attention car c'est asynchrone. Je dois probablement écouter l'événement DetectComplete.

Mais mon plus gros problème qu'il n'y a pas de variables de type Boolean. Je fini par utiliser:

<Variable Name="VCRedist2010SP1_x86" Value="0" Type="numeric"/> 

et comparez comme ceci:

DetectCondition="VCRedist2010SP1_x86 = 1"