2009-11-24 1 views
3

Une fois que l'utilisateur a parcouru l'assistant de configuration et fait quelques choix, il est habituel d'afficher le message VerifyReadyDlg pour indiquer "Êtes-vous prêt à installer?"Wix: Comment définir, lors de l'exécution, le texte à afficher dans VerifyReadyDlg?

Le VerifyReadyDlg intégré est statique. Il ne présente pas un résumé des choix qu'il a fait précédemment. Je voudrais le modifier pour qu'il le fasse.

Comment puis-je faire cela?


Exemple

"statique" texte:
alt text

texte intelligent:
alt text http://i46.tinypic.com/s4th7t.jpg

Je ne crois pas que je peux modifier la table de contrôle dans le MSI, parce que Les mods pendant le processus d'installation ne sont pas autorisés. J'ai trouvé MsiViewModifyInsertTemporary, mais je ne pense pas que ça marchera non plus. La ligne correspondante dans la table de contrôle est déjà présente et contient des données statiques. Je veux modifier les données, juste avant que VerifyReadyDlg soit affiché.

Répondre

3

Il se peut que vous ne puissiez pas modifier les lignes existantes dans les tables MSI, mais vous pouvez insérer de nouvelles lignes "temporaires". Ainsi, dans une action personnalisée, lors de l'exécution, insérez une ou plusieurs lignes temporaires dans la table de contrôle. En Javascript, il ressemble à ceci:

var controlView = Session.Database.OpenView("SELECT * FROM Control"); 
controlView.Execute(); 

var record    = Session.Installer.CreateRecord(12); 
record.StringData(1) = "VerifyReadyDlg"; // Dialog_ - the dialog to mod 
record.StringData(2) = "CustomVerifyText1"; // Control - any unique name will do 
record.StringData(3) = "Text";    // Type 
record.IntegerData(4) = 25;     // X 
record.IntegerData(5) = 70;     // Y 
record.IntegerData(6) = 320;     // Width 
record.IntegerData(7) = 65;     // Height 
record.IntegerData(8) = 2;     // Attributes 
record.StringData(9) = "";     // Property 
record.StringData(10) = text1;    // Text - the text to be displayed 
record.StringData(11) = "";     // Control_Next 
record.StringData(12) = "";     // Help 
controlView.Modify(MsiViewModify.InsertTemporary, record); 
controlView.Close();  

Vous voulez probablement que le texte personnalisé soit affiché seulement lors de l'INSTALLATION. Dans ce cas, ajouter une condition, de la même manière:

var controlCondView = Session.Database.OpenView("SELECT * FROM ControlCondition"); 
controlCondView.Execute(); 

record     = Session.Installer.CreateRecord(4); 
record.StringData(1) = "VerifyReadyDlg"; // Dialog_ 
record.StringData(2) = "CustomVerifyText1"; // Control_ - same name as above 
record.StringData(3) = "Show";    // Action 
record.StringData(4) = "NOT Installed";  // Condition 
controlCondView.Modify(MsiViewModify.InsertTemporary, record); 
controlCondView.Close(); 

Les constantes Msi sont définies comme suit:

// http://msdn.microsoft.com/en-us/library/aa372516(VS.85).aspx 
var MsiViewModify = 
{ 
    Refresh   : 0, 
    Insert   : 1, 
    Update   : 2, 
    Assign   : 3, 
    Replace   : 4, 
    Merge   : 5, 
    Delete   : 6, 
    InsertTemporary : 7, // cannot permanently modify the MSI during install 
    Validate   : 8, 
    ValidateNew  : 9, 
    ValidateField : 10, 
    ValidateDelete : 11 
}; 

quelques notes:

  1. Le texte InstallText de la table de contrôle est normalement affiché. Il peut être personnalisé avec un fichier .wxl, insérer quelque chose comme ceci:

    <String Id="VerifyReadyDlgInstallText">Whatever.</String>

    Il en résulte une ligne de la table de contrôle. Mais vous ne pouvez pas supprimer des lignes de la table lors de l'exécution.
    Si vous choisissez l'option X, Y et Hauteur, Largeur pour que votre nouveau texte personnalisé soit le même que pour l'InstallText statique, l'InstallText sera masqué.

  2. Il peut sembler contre-intuitif d'utiliser "NON installé" comme condition - mais rappelez-vous que c'est l'état du monde avant d'exécuter l'assistant d'installation. Si le MSI est Installed avant d'exécuter l'Assistant, alors vous ne l'installez probablement pas, ce qui signifie que vous n'avez pas besoin d'afficher les choix effectués dans l'assistant.

  3. Bien sûr, vous pouvez ajouter plusieurs contrôles de cette façon.Vous pouvez ajouter plusieurs contrôles de texte, ou ... Vous pouvez ajouter des lignes, des boutons, des cases à cocher, etc. Pour chacun d'eux, vous devrez définir le type de contrôle et la géométrie de manière appropriée. Utilisez Orca pour examiner la table de contrôle pour comprendre comment.

  4. Cette approche fonctionne pour tous les dialogues. Vous devez seulement être sûr d'exécuter l'action personnalisée pour insérer les lignes temporaires dans la table de contrôle, à un moment donné dans InstallUISequence, avant que le dialogue ne soit rendu.

Questions connexes