组件页面保留功能:始终表示已选中组件

时间:2012-08-27 05:17:57

标签: installer nsis

在我的MUI组件页面上,当用户试图离开该页面时,我会调用一个函数。在该函数中,我试图看到检查了至少1个组件。如果没有,那么我会显示一个MessageBox并中止(停止继续到下一页)。

我的问题:我的功能总是说即使某个组件没有,也会检查它。我做错了什么?

由于某种原因,程序总是认为第一个组件在没有时被检查/选择?

!include nsdialogs.nsh
!include MUI2.nsh

!define MUI_PAGE_CUSTOMFUNCTION_SHOW  compshow
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE compleave

!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_LANGUAGE "English"

OutFile "test.exe"

Function compshow

FunctionEnd

Function compleave

    !insertmacro SectionFlagIsSet ${section1} ${SF_SELECTED} +1 +2
    MessageBox MB_OK "Component Selected"
    MessageBox MB_OK "Component NOT Selected"

FunctionEnd


Section "Dummy1"

SectionEnd

Section "Dummy2"

SectionEnd

1 个答案:

答案 0 :(得分:1)

你的问题是相对跳跃。您应该使用一些标签,因为宏可能包含许多命令,而不仅仅是一个。

另外,认为执行将在第一次跳转后继续。别忘了跳过测试的其他分支。

修改后的compleave回调按预期工作:

Function compleave

    !insertmacro SectionFlagIsSet ${section1} ${SF_SELECTED} selected not_selected
    selected:
    MessageBox MB_OK "Component Selected"
    goto end
    not_selected:
    MessageBox MB_OK "Component NOT Selected"
    end:

FunctionEnd