NSIS nsi脚本错误:-!insertmacro:找不到名为“ SECTION_BEGIN”的宏

时间:2019-04-09 13:25:34

标签: nsis

在带有MUI2.nsh的nsi脚本中

代码:-

!macro SECTION_BEGIN

Section ""

Call zip2exe.SetOutPath

!macroend

!macro SECTION_END

SectionEnd

!macroend

但是如果我想定义两个或多个部分,那么在那种情况下如何合并SECTION_BEGIN部分?

Section "Main Component" MainCom
  #SectionIn RO # Just means if in component mode this is locked

    Call zip2exe.SetOutPath

  ;Store installation folder in registry
  WriteRegStr HKLM "Software\${ZIP2EXE_NAME}" "" $INSTDIR

  ;Registry information for add/remove programs
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${ZIP2EXE_NAME}" "DisplayName" "${ZIP2EXE_NAME}"

  WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${ZIP2EXE_NAME}" "NoRepair" 1

  ;Create optional start menu shortcut for uninstaller and Main component


  ;Create uninstaller
  WriteUninstaller "${ZIP2EXE_NAME}_uninstaller.exe"
#!macroend

#!macro SECTION_END

SectionEnd

#!macroend


;--------------------------------
;Uninstaller Section

Section "Uninstall"

  ;Delete the appdata directory + files
  RMDir /r "${INSTDIR_DATA}\*.*"
  RMDir "${INSTDIR_DATA}"

  ;Delete Start Menu Shortcuts
  Delete "$SMPROGRAMS\${ZIP2EXE_NAME}\*.*"
  RmDir  "$SMPROGRAMS\${ZIP2EXE_NAME}"

SectionEnd
#!macro SECTION_END

如果我们省略SECTION_BEGIN部分,则会出现错误。如果我们在这两节中都提到SECTION_BEGIN,那么也会出现错误。 该问题将如何解决?

1 个答案:

答案 0 :(得分:1)

如果实际上要使用Zip2Exe,则可以从中修改NSIS\Contrib\zip2exe\Base.nsh的一部分

!macro SECTION_END

  SectionEnd

!macroend

像这样

!macro SECTION_END

  SectionEnd

  !if /FileExists "c:\mycustomzip2exefiles\mycustomsections.nsh"
  !include "c:\mycustomzip2exefiles\mycustomsections.nsh"
  !endif

!macroend

然后您可以将所需的任何代码放入c:\mycustomzip2exefiles\mycustomsections.nsh

Section "My other section"
SetOutPath $InstDir
File "anotherfile.txt"
SectionEnd

但是,Zip2Exe主要是用于创建简单的自解压可执行文件的东西,您不应使用它来创建完整的安装程序。

创建真正的安装程序时,无需使用Zip2Exe,而使用MakeNSIS,并且没有诸如SECTION_BEGIN宏之类的东西,您只需向.NSI文件中添加任意数量的段即可。

Example2.nsi包含一个基本的安装程序/卸载程序。