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:
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é.
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.
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.
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.