【问题标题】:NSIS Installer: Run a function at the directory page before installationNSIS Installer:安装前在目录页面运行一个函数
【发布时间】:2016-02-12 12:58:36
【问题描述】:

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

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

我的问题是:当用户选择目录而在安装进度开始后如何运行该功能?我想运行该函数,并根据该函数的返回或基于该函数的内部调用显示一条消息,确认该目录中的所有内容都将被删除,然后如果用户确认,则安装开始。

替代方案:如果不能这样做,那么我可以接受以下操作:如果用户在安装过程中说“否”,安装程序应返回目录页面以询问不同的目录。

这是我目前拥有的 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."

谢谢。

【问题讨论】:

    标签: installation customization nsis


    【解决方案1】:

    如果您查看MUI documentation 中的“页面自定义函数”部分,您会发现一些定义的名称,您可以基于每页设置调用自定义函数的名称。您需要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,您可以阻止安装程序进入下一页。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      • 2015-10-14
      相关资源
      最近更新 更多