Installation NSD_GetState始终返回0:NSIS

Installation NSD_GetState始终返回0:NSIS,installation,nsis,Installation,Nsis,我试图在我的卸载程序中包含一个复选框。我能够将复选框放在适当的位置。但当我尝试获取复选框的状态时,它总是返回0,即使复选框已选中。这是我正在使用的代码 !define MUI_WELCOMEPAGE_TITLE_3LINES !define MUI_PAGE_CUSTOMFUNCTION_SHOW un.ModifyUnWelcome !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_INSTFILES !define MUI_FIN

我试图在我的卸载程序中包含一个复选框。我能够将复选框放在适当的位置。但当我尝试获取复选框的状态时,它总是返回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

我从您的自定义函数引用的两个不同页面中获得了上述代码。 ModifyUnfalcome是在创建MUI_UNPAGE_欢迎页面时调用,LeaveUnfalcome-当用户离开最后一个MUI_UNPAGE_完成页面时调用。 当您调用${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

您是否收到编译器警告?您的结果可能会被mecro执行破坏,使用变量存储${NSD_GetState}的结果是否会得到更好的结果?
!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