在完成页面中禁用后退按钮

时间:2013-10-28 12:55:12

标签: nsis

对于我的安装,我添加了新的自定义页面。它出现在MUI_PAGE_INSTFILES之后。但在此自定义页面不存在之前。问题是,添加此自定义页面后,它已完成页面和完成页面现在已启用后退按钮。在它被禁用之前(我没有做任何编码之前禁用后退按钮)。但添加新的自定义页面完成页面后,启用了后退按钮。

我的页面顺序

!insertmacro MUI_PAGE_WELCOME

!insertmacro MUI_PAGE_LICENSE "${Stpath}read me.txt"

!define MUI_PAGE_CUSTOMFUNCTION_PRE wel_pre

!define MUI_PAGE_CUSTOMFUNCTION_LEAVE DirectoryPageLeave 

!insertmacro MUI_PAGE_DIRECTORY

!insertmacro MUI_PAGE_INSTFILES

Page custom InstallPageCreate checkinstdir

!define MUI_FINISHPAGE_RUN "$INSTDIR\setupx.exe"

!define MUI_FINISHPAGE_RUN_PARAMETERS ""

!define MUI_PAGE_CUSTOMFUNCTION_PRE welfinish

!define MUI_PAGE_CUSTOMFUNCTION_SHOW FinishPageShow 

!define MUI_PAGE_CUSTOMFUNCTION_LEAVE myleave

!insertmacro MUI_PAGE_FINISH

页面自定义InstallPageCreate checkinstdir 之前没有,完成页面没有启用后退按钮。

在完成页面中添加自定义页面后退按钮后,仅在将某个命令行传递给安装程序时显示自定义页面。因此,如果没有为我的setup.exe传递命令行,则在MUI_PAGE_INSTFILES之后,完成页面到来。如果用户单击后退按钮,则再次显示MUI_PAGE_INSTFILES,文件将复制到安装目录。此外,如果出现该自定义页面,则该页面已禁用后退按钮,这是正确的。 此外,我需要知道这个后退按钮禁用的位置?它是在宏MUI_PAGE_INSTFILES(nsis builtin宏)中完成的吗?

所以我需要在完成页面中禁用后退按钮。请帮忙

1 个答案:

答案 0 :(得分:3)

makensis.exe(CEXEBuild :: ProcessPages)中有一些代码在页面上设置了一个标志:p-> flags | = PF_BACK_ENABLE;和UI.c中的代码检查此标志。要覆盖它,请使用页面show callback函数:

Function InstallPageCreate
StartMenu::Init /autoadd "Dummy page"
StartMenu::Show
FunctionEnd

!include MUI2.nsh
!insertmacro MUI_PAGE_INSTFILES
Page custom InstallPageCreate
!define MUI_FINISHPAGE_RUN "$INSTDIR\setupx.exe"
!define MUI_FINISHPAGE_RUN_PARAMETERS ""
!define MUI_PAGE_CUSTOMFUNCTION_SHOW FinishPageShow 
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE English

Function FinishPageShow
GetDlgItem $0 $HWNDPARENT 3
EnableWindow $0 0
FunctionEnd