【问题标题】:Calling PRE functions of MUI in NSIS installer, skipping pages/dialogs in NSIS installer在 NSIS 安装程序中调用 MUI 的 PRE 函数,在 NSIS 安装程序中跳过页面/对话框
【发布时间】:2011-04-29 06:52:27
【问题描述】:

MUI 对话框的 PRE 函数能否仅在需要时调用?

!define MUI_PAGE_CUSTOMFUNCTION_PRE SkipComponentsPage
!insertmacro MUI_PAGE_COMPONENTS

Function SkipComponentsPage
 Abort
MessageBox MB_OK "You chose to UPDATE your current version"
FunctionEnd

//默认勾选此部分,即用户无法选择或取消选择此部分,必须执行..........怎么做?隐藏它,我在它的名字中加入了一个-符号。它的名字是“强制的”

Section "-mandatory" SEC_UPDATE
    #Do update............
SectionEnd

我在 NSIS 安装程序的自定义对话框页面上有两个单选按钮(演示和更新)。 我希望当用户选择安装更新(选择更新单选按钮)时,跳过组件页面,并自动检查并执行指定的部分。

但如果用户选择安装 DEM(选择 DEMO 单选按钮),则不会跳过组件页面,用户可以在该组件页面上选中或取消选中部分。

【问题讨论】:

    标签: dialog custom-controls nsis skip modern-ui


    【解决方案1】:

    页面回调总是被调用,但你可以将逻辑放在函数内部:

    ...
    section "" SEC_UPDATE 
    sectionend
    
    Function SkipComponentsPage
    !insertmacro UnSelectSection ${SEC_UPDATE} ; Don't include update with demo by default?
    ${If} $InstallType == UPDATE
        !insertmacro SelectSection ${SEC_UPDATE}
        Abort
    ${EndIf}
    Functionend
    

    如果您希望用户能够在演示模式下选择更新,我不太清楚,但如果您想强制更新,您可以将该部分设为只读:

    section "Update" SEC_UPDATE 
    SectionIn RO
    sectionend
    

    (并从 pre 函数中删除 UnSelectSection 调用)

    ...或者只是按照您的建议使用 -name 前缀使该部分不可见。

    【讨论】:

    • 先生,你有没有看到我昨天讨论的我之前的帖子,请帮助我,我被困住了,我已经在那里发布了 cmets
    • 不,先生,在演示模式下,用户将无法更新,两者是完全独立的
    • 我会将此代码粘贴到您昨天的代码中,它会起作用吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    相关资源
    最近更新 更多