Installation 使用nsis安装程序,添加自定义单选按钮,根据选择的单选按钮调用部分

Installation 使用nsis安装程序,添加自定义单选按钮,根据选择的单选按钮调用部分,installation,custom-controls,nsis,nsis-mui,Installation,Custom Controls,Nsis,Nsis Mui,我希望,如果没有选择任何单选按钮,那么,当按下“下一步”按钮时,它应该发出警报,请至少选择一个项目,并且它不应该进入下一个对话框 另外,我希望如果用户选择选项:更新现有软件,则只复制部分文件,如果选择其他单选按钮,则复制所有文件 是否可以使用必须使用的节或函数?我可以调用一个节吗,比如选择RadioButton 1,然后调用CREATEALLFILES节,否则调用CREATEONLYTWOFILES节 据我所说,我想我想要的代码是如何持有这两个单选按钮的ID并相应地使用它们,以调用不同的部分或函

我希望,如果没有选择任何单选按钮,那么,当按下“下一步”按钮时,它应该发出警报,请至少选择一个项目,并且它不应该进入下一个对话框

另外,我希望如果用户选择选项:更新现有软件,则只复制部分文件,如果选择其他单选按钮,则复制所有文件

是否可以使用必须使用的节或函数?我可以调用一个节吗,比如选择RadioButton 1,然后调用CREATEALLFILES节,否则调用CREATEONLYTWOFILES节

据我所说,我想我想要的代码是如何持有这两个单选按钮的ID并相应地使用它们,以调用不同的部分或函数。密码是什么?请帮忙

另外,在按下本页的下一步后,下一个对话框将如下图所示:我想显示一个标签,无论演示是否完成,或者更新是否正在运行,为此,我将使用Resource Hacker添加一个标签,但如何显示该标签并根据用户选择的RadioButton将其隐藏

您可以选择/取消选择部分,或者将逻辑放在单个部分中,此示例同时执行以下两项操作:

!include nsDialogs.nsh
!include Sections.nsh

var InstallType

Section 
#Install common files...
${If} $InstallType == DEMO
    #Do demo specific stuff
${Else}
    #Do update specific stuff
${EndIf}
SectionEnd

Section "" SEC_DEMO
#Install demo..
SectionEnd

Section "" SEC_UPDATE
#Do update..
SectionEnd

Page custom InstTypePageCreate InstTypePageLeave

Function InstTypePageCreate
nsDialogs::Create 1018
pop $0
${NSD_CreateRadioButton} 0 50u 100% 10u "Demo"
pop $1
${IfThen} $InstallType == DEMO ${|} ${NSD_Check} $1 ${|}
${NSD_CreateRadioButton} 0 70u 100% 10u "Update"
pop $2
${IfThen} $InstallType == UPDATE ${|} ${NSD_Check} $2 ${|}
nsDialogs::Show
FunctionEnd

Function InstTypePageLeave
${NSD_GetState} $1 $0
${If} $0 = ${BST_CHECKED}
    StrCpy $InstallType DEMO
    !insertmacro UnselectSection ${SEC_UPDATE}
    !insertmacro SelectSection ${SEC_DEMO}
${Else}
    ${NSD_GetState} $2 $0
    ${If} $0 = ${BST_CHECKED}
        StrCpy $InstallType UPDATE
        !insertmacro UnselectSection ${SEC_DEMO}
        !insertmacro SelectSection ${SEC_UPDATE}
    ${Else}
        MessageBox MB_ICONSTOP "You must select something!"
        Abort
    ${EndIf}
${EndIf}
FunctionEnd

要在下一页设置文本,只需在测试$InstallType的if块中使用
${NSD_SetText}$hwndYourLabel“text”
和ShowWindow(该代码需要在该页的show函数回调(MUI_page_CUSTOMFUNCTION_show)中)

@sqlchild:“${IfThen}$InstallType==DEMO${124;}${NSD_Check}$1${如果你按“后退”按钮返回到收音机的页面,只需记住上一个状态buttons@sqlchild:您可以在未命名部分或两个特定部分中使用if/else块,它们执行相同的工作,只是不同…@sqlchild:每个部分都有一个索引(数字从0开始)使用Section*指令和sections.nsh宏时需要的,Secu DEMO就是我使用的名称。如果您不确定这一切是如何运作的,我建议您为所有部分命名,并在您的收音机选择页面后添加一个组件页面,然后四处播放,以了解其运作方式…@sqlchild:选择其中一个并删除另一个。就像我说的,添加一些MessageBox,然后再试一次。使用${SEC_DEMO}的代码必须位于.nsi中的部分之后