Ответ 1
Возможно, вам не удастся изменить существующие строки в таблицах MSI, но вы можете вставить новые "временные" строки.
Итак, в пользовательском действии во время выполнения вставьте одну или несколько временных строк в таблицу управления. В Javascript это выглядит так:
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();
Вероятно, вы хотите, чтобы пользовательский текст отображался только после УСТАНОВКИ. В этом случае добавьте условие так же:
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();
Константы Msi определяются следующим образом:
// 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
};
Несколько примечаний:
-
Обычно отображается файл InstallText в таблице Control. Его можно настроить с помощью файла .wxl, вставив что-то вроде этого:
<String Id="VerifyReadyDlgInstallText">Whatever.</String>
Это приводит к строке в таблице управления. Но вы не можете удалять строки из таблицы во время выполнения.
Если вы выберете X, Y и Height, Width для вашего нового пользовательского текста будет таким же, как для статического InstallText, то InstallText будет закрыт. -
Может показаться противоречивым использование "НЕ установлен" в качестве условия - но помните, что это состояние мира перед запуском Мастера установки. Если MSI
Installed
до запуска Мастера, то вы, вероятно, не устанавливаете его, а это означает, что вам не нужно отображать выбор, сделанный в мастере. -
Конечно, вы можете добавить несколько элементов управления таким образом. Вы можете добавить несколько элементов управления текстом или... Вы можете добавить строки, кнопки, флажки, что угодно. Для каждого из них вам необходимо установить тип управления и геометрию соответствующим образом. Используйте Orca, чтобы изучить таблицу Control, чтобы выяснить, как это сделать.
-
Этот подход работает для любого диалога. Вам нужно только выполнить произвольное действие, чтобы вставить строки temp в таблицу Control, в какой-то момент в InstallUISequence, перед визуализацией Dialog.