2017-09-22 4 views
0

J'utilise Wix3.11 et j'essaie de personnaliser ExitDialog. Le code source de la boîte de dialogue (ExitDialog.wxs dans wix3-wix31rtm.zip) planifie cette boîte de dialogue avec la déclaration suivante:Wix3: l'attribut Overridable de l'élément <Show> est ignoré?

<Show Dialog="ExitDialog" OnExit="success" Overridable="yes" /> 

Alors, j'ai copié ce fichier dans mon répertoire local MyExitDialog.wxs, renommer le dialogue Id de ExitDialog à MyExitDialog et programmé avec cette boîte de dialogue:

<Show Dialog="MyExitDialog" OnExit="success" /> 

Mais, quand je courais la lumière, je me suis l'erreur suivante:

MyExitDialog.wxs(37): error LGHT1050: The AdminUISequence table contains actions 'MyExitDialog' and 'ExitDialog' which both have the same sequence number -1. Please change the sequence number for one of these actions to avoid an ICE warning. 
C:\build\work\eca3d12b\wix3\src\ext\UIExtension\wixlib\ExitDialog.wxs(29): error LGHT1051: The location of the action related to previous warning. 

Je me attendais le spectacle de MyExitDialog el ement remplace l'élément show d'ExitDialog d'origine, mais cela ne fonctionne pas de cette façon. Est-ce que je ne comprends pas comment fonctionne l'attribut Overridable? Ou, je regarde le mauvais fichier ExitDialog.wxs?

Répondre

1

Vous y compris quelque chose comme

<UIRef Id="WixUI_Minimal"/> 

dans votre installation. Vous devez trouver le fichier d'interface utilisateur associé (here) et copier le contenu de ce fichier dans un nouveau wxs dans votre projet wix. Vous pouvez nommer ce "MyUI" ou quelque chose et aussi mettre à jour l'Id dans la balise <UI Id="..."> de "WixUI_Minimal" à quelque chose d'autre (par exemple).

Dans le nouveau fichier que vous venez de créer, mettre à jour qu'une ligne

<Show Dialog="ExitDialog" OnExit="success" Overridable="yes" /> 

à

<Show Dialog="MyExitDialog" OnExit="success" /> 

maintenant dans votre <Product> mise à jour <UIRef> pour faire référence à votre nouvelle interface utilisateur.

Le WixUIExtension contient un wixlib avec toutes les définitions de l'interface utilisateur et des boîtes de dialogue. Vous venez de définir une nouvelle boîte de dialogue de sortie dans votre projet, mais l'ancienne existe toujours et est définie dans la DLL WixUIExtension. Puisque vous utilisiez toujours l'ancien UIRef, il apportait tout avec votre unique dialogue défini. Cela a provoqué la double définition des actions avec la séquence -1.

La balise Overridable a ce texte

If "yes", the sequencing of this dialog may be overridden by sequencing elsewhere.

Cela signifie que vous pouvez redéfinir la séquence de la boîte de dialogue:

<Show Dialog="ExitDialog" Sequence="55" Overridable="yes"/> 
(or Before="..." or After="..." or OnExit="...") 

et avoir aucune erreur de redéfinition car il a été marqué Overridable.

Le problème de la racine est que vous ne pouvez pas avoir deux <Show> balises avec les deux OnExit="success"

+0

Merci pour la réponse. Je pensais que l'attribut 'Overrideable' permettrait à d'autres dialogues de 'surcharger' la séquence -1. Mais, ce que cela fait est de permettre de re-planifier ExitDialog à une autre séquence. –