NSIS Installer: 运行 安装前目录页的一个函数

NSIS Installer: Run a function at the directory page before installation

我创建了一个非常简单的安装程序,它没有添加任何注册表项或任何东西。它只是安装一些 python 可执行程序的一些文件。安装程序仅包含询问安装目录然后安装软件的 1 个步骤。

问题:如果安装了以前版本的程序或用户选择的目录中包含文件,我想通过[=38进行一些检查=]在安装开始前CleanInstallationDirectory安装一个函数

我的问题是:我怎么才能运行在用户选择目录的时候有那个功能,安装后没有进步开始?我想 运行 那个函数,并且基于那个函数的 return 或基于那个函数的内部调用显示一条消息,确认该目录中的所有内容都将被删除,然后如果用户确认,那么安装开始。

替代方案:如果无法做到这一点,那么我可以接受以下内容:如果用户在安装过程中说 "No",安装程序应该返回目录页面询问其他目录。

这是我当前的 NSIS 安装程序脚本:

  Function CleanInstallationDirectory

## do stuff

  FunctionEnd


  Name "My Software"
  OutFile "GNOMEAcqInstaller.exe"

  InstallDir "D:\MySoftware"

  RequestExecutionLevel admin



  !define MUI_ABORTWARNING

  !insertmacro MUI_PAGE_DIRECTORY
  !insertmacro MUI_PAGE_INSTFILES

  !insertmacro MUI_LANGUAGE "English"



Section "Installation" InstallSection

  SetOutPath "$INSTDIR"

  Call CleanInstallationDirectory

  File /r "MyFiles\*"
SectionEnd

  LangString DESC_SecDummy ${LANG_ENGLISH} "A test section."

谢谢。

如果您查看 MUI documentation 中的 "Page Custom Functions" 部分,您会发现一些可以在每页基础上设置的定义的名称,这些定义将调用自定义函数。您需要 MUI_PAGE_CUSTOMFUNCTION_SHOWMUI_PAGE_CUSTOMFUNCTION_LEAVE,具体取决于您希望函数何时变为 运行。

!insertmacro MUI_PAGE_WELCOME
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE CleanInstallationDirectory
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"

如果您在自定义离开函数中调用 Abort,您可以阻止安装程序进入下一页。