Comment faire pour installer les fonctionnalités en fonction de la valeur de la propriété
J'ai une clé de registre qui peut être égale à l'une des deux valeurs: valeur spéciale ou null. Et les deux fonctions.
Quand ma clé de registre est égal à valeur spéciale le programme d'installation a d'abord installer la fonctionnalité. si la clé de registre n'est pas trouvé par la recherche du registre que l'installateur doit installer deuxième long métrage. Et si la clé de registre a null valeur le programme d'installation ne doit pas installer l'une de ces deux caractéristiques.
Ce que je fais, ni la compréhension de mal? Si INSTALLLEVEL=5, SPECIALVALUE="spéciale",MYTREAT="1" la première fonction doit être installé,mais le programme d'installation ne pas installer les deux caractéristiques dans ce cas.
<Feature Id="MyFeatures" Level="1" ConfigurableDirectory='INSTALLLOCATION' Display='expand' AllowAdvertise='no'>
<ComponentRef Id='Empty'/>
<Feature Id='First' Level='3' AllowAdvertise='no' ConfigurableDirectory='INSTALLLOCATION'>
<Condition Level="0">INSTALLLEVEL=4 OR (MYTREAT="1" AND NOT SPECIALVALUE AND NOT SPECIALVALUE="")</Condition>
<Condition Level="1">SPECIALVALUE="special" AND MYTREAT="1"</Condition>
<ComponentRef Id="first_comp"/>
</Feature>
<Feature Id="Second" Level="4" AllowAdvertise="no" ConfigurableDirectory="INSTALLLOCATION">
<Condition Level="0">INSTALLLEVEL=3 OR (MYTREAT="1" AND SPECIALVALUE)</Condition>
<ComponentRef Id="second_comp"/>
</Feature>
</Feature>
J'avais modifié mon code, mais ça ne marche toujours pas droit. Problème avec des conditions. Il y a une valeur particulière dans la clé de registre, mais le programme d'installation est encore à sauter premier long métrage. J'avais trouvé cette condition avec seulement "MYTREAT=1" n'est pas de travail. Mais dans les journaux côté client est l'envoi de MYTREAT bien avec cette valeur pour le serveur.. INSTALLLEVEL est 1. MYTREAT propriété est initialisée avec bouton-poussoir de contrôle,peut-être ici est mon problème? Voici le nouveau code:
<Feature Id="Myfeatures" Level="3"
ConfigurableDirectory='INSTALLLOCATION'
Display='expand' AllowAdvertise='no'>
<Condition Level='1'>MYTREAT="1"</Condition>
<ComponentRef Id='Empty'/>
<Feature Id='First' Level='3' AllowAdvertise='no'
ConfigurableDirectory='INSTALLLOCATION'> <!--Must be installed by default,default value of INSTALLLEVEL is 3-->
<Condition Level="1">MYTREAT="1" AND SPECIALVALUE="SPECIAL"</Condition>
<ComponentRef Id="first_comp"/>
</Feature>
<Feature Id="Second" Level="10" AllowAdvertise="no"
ConfigurableDirectory="INSTALLLOCATION"><!---->
<Condition Level="1">(MYTREAT="1" AND NOT SPECIALVALUE)</Condition>
<ComponentRef Id="second_comp"/>
</Feature>
</Feature>
............
<Dialog Id="TreatDlg" Width="260" Height="85">
<Control Id="Mytreat" Type="PushButton" X="50" Y="57" Width="56" Height="17" Property="MYTREAT">
<Publish Property="MYTREAT" Value="1">1</Publish>
<Publish Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
</Control>
P. S. j'ai initialisé MYTREAT avec 1 par défaut et l'état a été évalué correctement. Pourquoi je ne peux pas utiliser la propriété du contrôle en fonction de l'état? Et comment faire pour résoudre mon problème!Merci de toute aide!
OriginalL'auteur Nerielle | 2011-09-26
Vous devez vous connecter pour publier un commentaire.
Une erreur commune est d'essayer de contrôler les fonctionnalités par le biais de INSTALLLEVEL de la propriété. L'installation de niveau doit être statique, vous ne devriez pas changer lors de l'installation.
La INSTALLLEVEL valeur est considéré comme un niveau au-dessus duquel les fonctionnalités ne sont plus installés. Par exemple, si INSTALLLEVEL = 5 une fonctionnalité de Niveau 4 seront installés et une fonctionnalité de Niveau 6 ne sera pas installé.
Par INSTALLLEVEL vous pouvez contrôler la fonction d'origine de l'état, par exemple:
Pour la configuration ci-dessus, vous pouvez ensuite ajouter d'installer des conditions par la fixation d'un Niveau inférieur ou supérieur INSTALLLEVEL:
Comme vous pouvez le voir, le Niveau de fonctionnalité des attributs tournent autour de INSTALLLEVEL, pas l'inverse.
Edit:
Fonction de les conditions sont évaluées avant toute installation dialogues sont affichés. Vous ne pouvez donc pas la condition d'une fonction avec un contrôle de boîte de dialogue (par exemple une case à cocher ou un bouton).
Une solution serait d'utiliser une action personnalisée qui modifie la fonctionnalité d'action basé sur votre propriété personnalisée. Par exemple, vous pouvez utiliser MsiSetFeatureState fonction. Vous pouvez trouver une action personnalisée tutoriel ici:
http://www.codeproject.com/KB/install/msicustomaction.aspx
Il y a déjà une solution pour changer via les boîtes de dialogue? "standard, complète" ?
OriginalL'auteur user527987