复制完所有文件后,可以使用NSIS回调函数吗?

时间:2012-10-01 08:11:09

标签: installation nsis

尝试优化我在.onInstSuccess callback function中进行ExecWait次调用的MUI 2 NSIS设置,我正在搜索the documentation以查找名为的回调:

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

不幸的是,我没有发现这样的回调。

因此我的问题是:

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

2 个答案:

答案 0 :(得分:1)

我自己找到了解决方案(可能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

这就是诀窍。

答案 1 :(得分: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 ...

,否则将打印到日志中