Ошибка сценария NSIS NSIS: -! Insertmacro: макрос с именем "SECTION_BEGIN" не найден - PullRequest
0 голосов
/ 09 апреля 2019

В скрипте nsi с MUI2.nsh

Код: -

!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 Ответ

1 голос
/ 09 апреля 2019

Если вы действительно хотите использовать 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 содержит базовый установщик / деинсталлятор.

...