1

我在SetupProgress 显示AskOptions提供一些快捷选项的对话框的对话框之前插入了一个简单的自定义操作。

在大多数情况下,我的行为符合预期,但有一种行为我无法弄清楚。如果用户单击后退按钮,我希望它转到上一个对话框而不是继续SetupProgress对话框。我将以下代码用于我的对话框(减去实际创建快捷方式的代码)。

function MyFunction(hMSI)

    NUMBER nResult;

    STRING szMsg, szText1, szText2, szText3;
    NUMBER nReturn, nValue,  nvCheck1, nvCheck2, nvCheck3;

begin
    SetDialogTitle(DLG_ASK_OPTIONS, "More Options");
    szMsg = "Select from the additional options below.";

    szText1 = "Shortcut option 1";
    szText2 = "Shortcut option 2";
    szText3 = "Shortcut option 3";

    nvCheck1 = TRUE;
    nvCheck2 = TRUE;
    nvCheck3 = FALSE;

    // Display the check box (NONEXCLUSIVE) dialog.
    nValue = NONEXCLUSIVE;
    nResult = AskOptions (nValue, szMsg,
           szText1, nvCheck1,
           szText2, nvCheck2,
           szText3, nvCheck3);


    //This is the troublesome code... Not sure how to handle this...       
    //if (nResult = BACK) then
    //    goto [Where?];
    //endif;


end;

如您所见,在底部附近有一条线,我可以在其中处理后退按钮,我只是不知道如何实际返回到上一个对话框。

4

1 回答 1

1

我建议不要尝试交错基本 MSI 表驱动对话框和 InstallScript 代码驱动对话框。这会很困难,而且可能会导致一些奇怪的育儿问题,或者最坏的情况是失去注意力。

goto <previous dialog label>;方法作为显示多个对话框的脚本的一部分工作。通过向后跳转,它会将该标签之后的对话框显示为下一个对话框。所以你想以某种方式模拟它。如果您从控制事件中显示此 InstallScript 对话框,也许您应该让它设置一个属性,使您能够确定接下来要显示的对话框。例如,如果将属性DLGBUTTON设置为NEXTBACK,则可以根据 DLGBUTTON 的值创建两个具有互斥条件的 NewDialog 控件事件。如果此自定义操作正在其他地方调用,请相应地调整调用程序。

但是,如果可能,请尝试使用 MSI 表来实现此对话框,并避免使用非内聚 UI 时遇到很多困难。

于 2016-06-08T12:18:14.050 回答