2010-11-12 33 views
2

Je rencontre un problème avec les conditions d'installation en mode maintenance qui ne se produisent que dans les systèmes avec UAC. Je fais une recherche de registre pour définir quelques propriétés qui sont utilisées dans la condition d'installation. Cela fonctionne au cours de l'installation initiale, mais lorsque j'essaie de réparer ou de modifier la sélection de fonctionnalité, la condition d'installation échoue et j'obtiens le message pour la condition d'installation ayant échoué.La condition d'installation de WiX échoue pendant la réparation dans les systèmes avec UAC

C'est ce que ma source de Wix ressemble:

<Product Id="MyProduct" ... > 
    <Package InstallPrivileges="elevated" ... /> 
    <Condition Message="This installtion requires product X or Y. 
         Setup will now quit."> 
    <![CDATA[(MYPROPERTY1 OR MYPROPERTY2)]]> 
    </Condition> 

    <Property Id="MYPROPERTY1"> 
    <RegistrySearch Id="MySearch1" 
        Root="HKLM" 
        Key="Software\Company\ProductX" 
        Name="Installed" 
        Type="raw" 
        Win64="no"/> 
    </Property> 
    <Property Id="MYPROPERTY2"> 
    <RegistrySearch Id="MySearch2" 
        Root="HKLM" 
        Key="Software\Company\ProductY" 
        Name="Installed" 
        Type="raw" 
        Win64="no"/> 
    </Property> 

    <!-- ... Features and components and stuff ... --> 
</Product> 

Je suppose que l'UAC empêche mes recherches de registre de se produire, mais je pensais que la mise InstallPrivileges à « élevé » entraînerait une invite UAC lors de la réparation . Cependant, je ne reçois jamais une invite UAC, la réparation échoue juste. Si je désactive le contrôle de compte d'utilisateur, la réparation fonctionne comme prévu. Est-ce que je manque quelque chose d'autre ici? Editer: Je dois souligner que l'échec ne se produit que lorsque je choisis "Modifier" à partir d'ARP, puis choisissez Réparer. Si je choisis "Repair" directement dans ARP, cela fonctionne comme prévu.

Répondre

4

Enregistrez la réparation pour voir les propriétés définies par AppSearch. Pensez également à mettre "ou installé" sur vos conditions afin que les conditions ne s'appliquent que lors de l'installation initiale. Rien de plus ennuyeux le ne peut pas installer le produit B parce que le produit A a été désinstallé en premier.

Mise à jour: Les AppSearch dans le bon journal et le mauvais journal se comportent exactement les mêmes. Le problème est que vous n'avez pas mis l'attribut @Secure sur vos éléments de propriété de sorte qu'ils ne figurent pas dans la propriété SecureCustomProperties. Si vous regardez dans le journal, vous trouverez une ligne qui dit "ignorer la propriété non autorisée". Pour plus d'informations lire:

Reasons why your setup may fail on Windows Vista

+0

Christopher, merci pour vos suggestions. J'ai été capable de me débarrasser du bogue en ajoutant "OU installé" à la condition d'installation, bien que je me demande toujours ce qui cause le comportement différent quand UAC est actif. J'ai comparé les journaux de non-UAC et UAC, et toutes les propriétés sont définies dans les deux instances, cependant, lorsque UAC est actif LaunchConditions renvoie 3 sans explication pour la différence. Les logs montrent que la propriété utilisée a la valeur correcte, donc l'échec est un mystère complet. –

+0

Si vous voulez envoyer les journaux à moi, je pourrais regarder plus. –

+0

Traqué votre adresse @ deploymentengineering.com. J'apprécierais grandement que vous me fassiez savoir si vous trouvez quelque chose. –