NSD_GetState始终返回0:NSIS

时间:2015-09-24 16:48:39

标签: installer nsis

我试图在我的卸载程序中包含一个复选框。我能够把复选框放到位。但是,当我尝试获取复选框的状态时,即使选中复选框,它也始终返回0。这是我正在使用的代码

!define MUI_WELCOMEPAGE_TITLE_3LINES
!define MUI_PAGE_CUSTOMFUNCTION_SHOW un.ModifyUnWelcome
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_INSTFILES
!define MUI_FINISHPAGE_TITLE_3LINES
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE un.LeaveUnWelcome
!insertmacro MUI_UNPAGE_FINISH

Function un.ModifyUnWelcome
${NSD_CreateCheckbox} 120u -18u 50% 25u "Do something special"
Pop $mycheckbox
SetCtlColors $mycheckbox "" ${MUI_BGCOLOR}
${NSD_Check} $mycheckbox ; Check it by default
FunctionEnd

Function un.LeaveUnWelcome
${NSD_GetState} $mycheckbox $0
MessageBox MB_OK "On Leave mycheckbox = $mycheckbox $\n $$0 = $0"
${If} $0 <> 0
    MessageBox mb_ok "I'm special"
${EndIf}
FunctionEnd

因此,我无法验证复选框是否已选中。 我的代码有什么问题,我该如何解决?

我甚至尝试了类似下面的内容

${NSD_Check} $mycheckbox ; Check it by default
${NSD_SetState} $mycheckbox ${BST_CHECKED}

我从Adding a checkbox to the NSIS Uninstaller Welcome Page

获得了上述代码

1 个答案:

答案 0 :(得分:0)

您的自定义功能涉及两个不同的页面。 ModifyUnWelcome在创建MUI_UNPAGE_WELCOME页面时调用,LeaveUnWelcome - 当用户离开最后一个MUI_UNPAGE_FINISH页面时。 在您调用$ {NSD_GetState}时,ModifyUnWelcome处理所拥有的控件将被销毁。您应该将自定义函数定义放在附近,放在引用的页面声明之前。

!define MUI_WELCOMEPAGE_TITLE_3LINES
!define MUI_PAGE_CUSTOMFUNCTION_SHOW un.ModifyUnWelcome
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE un.LeaveUnWelcome
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_INSTFILES
!define MUI_FINISHPAGE_TITLE_3LINES
!insertmacro MUI_UNPAGE_FINISH