【问题标题】:How to cancel a NSIS setup without showing a confirmation message box?如何取消 NSIS 设置而不显示确认消息框?
【发布时间】:2012-06-19 15:12:33
【问题描述】:

使用Modern UI 2 进行 NSIS 设置后,用户在单击安装向导中的 取消 按钮时会收到一个确认消息框。

我希望用户能够退出安装向导确认额外的“你确定吗?”对话框消息框。

在 MUI 源代码中我发现了这个片段:

!macro MUI_FUNCTION_ABORTWARNING

  Function .onUserAbort

    !ifdef MUI_PAGE_FUNCTION_ABORTWARNING
      Call ${MUI_PAGE_FUNCTION_ABORTWARNING}
    !endif

    !ifdef MUI_ABORTWARNING
      !insertmacro MUI_ABORTWARNING
    !endif

    !ifdef MUI_CUSTOMFUNCTION_ABORT
      Call "${MUI_CUSTOMFUNCTION_ABORT}"
    !endif
  FunctionEnd

!macroend

我能够定义MUI_PAGE_FUNCTION_ABORTWARNING 函数和MUI_CUSTOMFUNCTION_ABORT 函数。

由于实际的消息框是在对MUI_ABORTWARNING 宏的调用中定义的,因此我认为没有办法阻止宏被调用。

我的问题是:

当用户在设置过程中点击取消按钮时,有没有办法阻止MUI向用户显示确认消息框?

【问题讨论】:

    标签: installation nsis messagebox modern-ui


    【解决方案1】:

    此警告由 !define MUI_ABORTWARNING 控制(在您包含 mui.nsh 之前):

    Name "Test"
    Outfile "Test.exe"
    RequestExecutionLevel user
    
    #Comment/uncomment this to toggle the messagebox: !define MUI_ABORTWARNING
    
    !include MUI2.nsh
    
    !insertmacro MUI_PAGE_WELCOME
    !insertmacro MUI_PAGE_INSTFILES
    !insertmacro MUI_PAGE_FINISH
    !insertmacro MUI_LANGUAGE English
    
    Section
    SectionEnd
    

    【讨论】:

    • 谢谢,@Anders,我tried this,它似乎不起作用。我在欢迎页面上单击Cancel,但仍然收到我是否要退出的问题。由于我知道您的答案质量很高,我想知道我在my script 中的错误在哪里。有什么想法吗?
    • 对不起,我不明白;第 12 行是您建议插入的 !define MUI_ABORTWARNING。我很困惑...
    • 这太疯狂了;该行之前不存在,然后我添加了它,现在我将其注释掉,现在消息框真的消失了。所以它现在正在工作,虽然我不知道为什么。
    【解决方案2】:

    (未测试)你可以尝试取消定义相应的函数吗?

    !undef MUI_ABORTWARNING
    //or
    !undef MUI_FUNCTION_ABORTWARNING
    

    【讨论】:

    • 谢谢,@Seki - 我已经试过了(然后又试了一次)。它不断给出错误消息“!undef: "MUI_ABORTWARNING" not defined!
    • MUI_FUNCTION_ABORTWARNING 是一个宏,不能!undef'ed
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 2017-10-19
    • 2013-12-10
    相关资源
    最近更新 更多