1

对于我的安装,我添加了新的自定义页面。它出现在 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 内置宏)中完成的吗?

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

4

1 回答 1

3

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

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
于 2013-10-28T20:23:20.380 回答