Размер диалогового окна WIX, чтобы соответствовать тексту Dynami c - PullRequest
0 голосов
/ 10 марта 2020

У меня установлено свойство [PREREQUISITES_MISSING] в настраиваемом действии (C#). Его значение представляет собой строку, содержащую список предварительных условий, которые, как считалось, отсутствовали при различных проверках Powershell / Registry.

Я отображаю диалоговое окно перед диалоговым окном "Welcome" по умолчанию в UISequence, при условии, что по крайней мере отсутствует одно обязательное условие.

Моя проблема:

Список предварительных условий может быть длинным или коротким. Если оно длинное, оно отрезано. Если я установлю размер диалога очень большим, во многих случаях это может быть в основном пустое пространство. Возможно ли сделать или из следующих действий:

  • Динамически установить ширину / высоту диалога на основе содержимого
  • Включить полосу прокрутки в диалоговом окне если содержимое превышает ширину / высоту
<Dialog Id="PrereqsMissingDlg" Width="260" Height="85" Title="!(loc.InstallDirDlg_Title)" NoMinimize="yes">
    <!--Other controls removed for brevity-->
    <Control Id="PrereqsMissingTxt" Type="Text" X="48" Y="15" Width="200" Height="30" TabSkip="no" Text="[PREREQUISITES_MISSING]" />
</Dialog>

Ответы [ 2 ]

1 голос
/ 10 марта 2020

В ответ на ответ Кристофера вот код, необходимый для ответа на мой вопрос:

Пользовательское действие (C#)

[CustomAction]
public static ActionResult VerifyPrerequisites(Session Session)
{
    //(prereq checking code removed for brevity)

    //Retrieve and remove the dialog record
    Database db = Session.Database;
    View view = db.OpenView("SELECT * FROM Control WHERE Dialog_='PrereqsMissingDlg' AND Control='PrereqsMissingText'");
    view.Execute();
    Record record = view.Fetch();
    view.Delete(record);

    //Convert the error messages to RTF
    System.Windows.Forms.RichTextBox rtb = new System.Windows.Forms.RichTextBox();
    rtb.Text = errorMsg;

    //Update the record with the missing prereqs text
    record.SetString("Text", rtb.Rtf);   

    //Insert the new record
    string sqlInsertSring = db.Tables["Control"].SqlInsertString + " TEMPORARY";
    view = db.OpenView(sqlInsertSring);

    view.Execute(record);
    view.Close();

    return ActionResult.Success;
}

Пересмотренный диалог

<Dialog Id="PrereqsMissingDlg" Width="260" Height="85" Title="!(loc.InstallDirDlg_Title)" NoMinimize="yes">
    <!--Other controls removed for brevity-->
    <Control Id="PrereqsMissingText" Type="ScrollableText" X="48" Y="15" Width="200" Height="30" Sunken="yes">
        <Text></Text>
    </Control>
</Dialog
1 голос
/ 10 марта 2020

Ни одно из этих двух решений не возможно. Однако ScrollableText (RTF) должен делать то, что вы ищете. Обратите внимание, что вы не можете использовать отформатированные типы, такие как [PREREREQS_MISSING], но вы можете использовать dyami c UI, как описано в моем блоге здесь:

http://blog.iswix.com/2008/07/dynamic-windows-installer-ui.html

Просто измените SQL, чтобы обновить строку базы данных, которая содержит стандартный RTF для элемента управления, который вы определяете в WiX. Вы можете понять это, посмотрев на встроенный MSI с помощью ORCA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...