【问题标题】:Possible to have an NSIS callback function after all files were copied?复制所有文件后可能有 NSIS 回调函数吗?
【发布时间】:2012-10-01 23:35:59
【问题描述】:

为了优化我的 MUI 2 NSIS 设置,我在 .onInstSuccess callback function 中进行了一些 ExecWait 调用,我正在搜索 the documentation 以找到调用的回调:

  • 文件全部复制后-和-
  • 在向导页面从文件复制页面切换到完成页面之前。

很遗憾,我没有找到这样的回调。

因此我的问题是:

是否可以在文件复制之后和向导页面从文件复制页面切换之前进行一些自定义处理?

【问题讨论】:

    标签: installation nsis


    【解决方案1】:

    使用MUI_PAGE_CUSTOMFUNCTION_LEAVE 很好。这实际上取决于您是否希望在日志中打印“已完成”之前或之后执行操作。对于前者,您可以将代码粘贴在最后一部分:

    Section
    SetOutPath $Instdir
    File "Foo"
    File "Bar"
    
    ExecWait '"$Instdir\dofinalthing.exe" /blah'
    SectionEnd
    

    Section
    SetOutPath $Instdir
    File "Foo"
    File "Bar"
    SectionEnd
    
    Section -post
    ExecWait '"$Instdir\dofinalthing.exe" /blah'
    SectionEnd
    

    这当然会成为进度条的一部分,并且会打印到日志中,除非您使用 setdetailsprint...

    【讨论】:

    • 很好的答案(一如既往;-)。非常感谢,安德斯!
    【解决方案2】:

    我自己刚刚找到了解决方案(也许Anders 会有更好的解决方案):

    MUI 2 允许定义自定义回调函数,所以我在定义之前使用了MUI_PAGE_CUSTOMFUNCTION_LEAVE macro

    !insertmacro MUI_PAGE_INSTFILES
    

    注册一个自定义函数。所以我的 NSI 文件看起来像:

    ...
    !define MUI_PAGE_CUSTOMFUNCTION_LEAVE inst_leave
    !insertmacro MUI_PAGE_INSTFILES
    ...
    

    inst_leave 类似于

    Function inst_leave
        ...
    FunctionEnd
    

    这成功了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-07
      • 2012-06-28
      • 2021-04-12
      相关资源
      最近更新 更多