Что не так с моим вторым звонком в ReadINIStr? - PullRequest
1 голос
/ 30 мая 2019

Я новичок в NSIS. Попытка создать небольшой пример, который поможет понять методы, которые я хотел бы использовать в производственном инсталляторе, который в конечном итоге собирается ...

Я хотел бы создать программу установки без вывода сообщений, которая получает свой параметр из файла .INI с несколькими разделами. Хочу конкретизировать раздел командной строки установщика.

Итак, у меня есть этот NSIS-TEST.INI-файл:

[PROD]
PATHONE=c:\Folder\Foo
AppName=My little stupid app

Идея состоит в том, чтобы иметь такую ​​командную строку:

FooSetup config=prod

Фактическая настройка NSIS-TEST.NSI:

; Script generated by the HM NIS Edit Script Wizard.
var /global REGAPPKEY
var /global PRODUCT_DIR_REGKEY
; HM NIS Edit Wizard helper defines
!define REG_APPKEY ""
!define config "PROD"
!define PATHONE ""
!define PRODUCT_NAME "foo"
!define PRODUCT_VERSION "1.0"
!define PRODUCT_PUBLISHER "foo"
!define PRODUCT_WEB_SITE "http://www.example.com"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"

Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"

OutFile "FooSetup.exe"
InstallDir "c:\foo-goo"
Icon "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
UninstallIcon "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
;SilentInstall silent
;SilentUninstall silent
;InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""

Section -aHauptgruppe SEC01

ReadINIStr $REGAPPKEY $INSTDIR\nsis-test.ini  ${config} "AppName"

ReadINIStr $PATHONE $INSTDIR\nsis-test.ini ${config} "PATHONE"


;MessageBox MB_ICONINFORMATION|MB_OK "config=${config}"


  ;SetOutPath "$INSTDIR"
  ;SetOverwrite ifnewer
;  File "..\..\..\pfad\zur\datei\AppMainExe.exe"
 ; CreateDirectory "$SMPROGRAMS\foo"
 ; CreateShortCut "$SMPROGRAMS\foo\foo.lnk" "$INSTDIR\AppMainExe.exe"
 ; CreateShortCut "$DESKTOP\foo.lnk" "$INSTDIR\AppMainExe.exe"
 ; File "..\..\..\path\to\file\Example.file"
SectionEnd

Section -AdditionalIcons
  WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
  CreateShortCut "$SMPROGRAMS\foo\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
  CreateShortCut "$SMPROGRAMS\foo\Uninstall.lnk" "$INSTDIR\uninst.exe"
SectionEnd

Section -Post
  WriteUninstaller "$INSTDIR\uninst.exe"
  ;WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\AppMainExe.exe"
  ;WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
  ;WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
  ;WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\AppMainExe.exe"
  ;WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
  ;WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
  ;WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
SectionEnd


Function un.onUninstSuccess
  MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) wurde erfolgreich deinstalliert."
FunctionEnd

Function un.onInit
  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "M�chten Sie $(^Name) und alle seinen Komponenten deinstallieren?" IDYES +2
  Abort
FunctionEnd

Section Uninstall
  Delete "$INSTDIR\${PRODUCT_NAME}.url"
  Delete "$INSTDIR\uninst.exe"
  Delete "$INSTDIR\Example.file"
  Delete "$INSTDIR\AppMainExe.exe"

  Delete "$SMPROGRAMS\foo\Uninstall.lnk"
  Delete "$SMPROGRAMS\foo\Website.lnk"
  Delete "$DESKTOP\foo.lnk"
  Delete "$SMPROGRAMS\foo\foo.lnk"

  RMDir "$SMPROGRAMS\foo"
  RMDir "$INSTDIR"

  DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
  ;DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
  SetAutoClose true
SectionEnd

FooSetup config=prod

Если я скомпилирую это, последние строки вывода будут:

Section: "-aHauptgruppe" ->(SEC01)
ReadINIStr $REGAPPKEY [PROD]:AppName from $INSTDIR\nsis-test.ini

Usage: ReadINIStr $(user_var: output) ini_file section entry_name
Error in script "c:\blabla\setup2019\nsis-test.nsi" on line 29 -- aborting creation process

Итак, он обработал первую из моих ReadINIStr -инструкций и перебил второй. Я часами просматривал этот код, вводил перевод строки и т. Д., Но не вижу, что же такого особенного во второй инструкции ...

1 Ответ

1 голос
/ 30 мая 2019

$PATHONE не является переменной. Вы скучаете:

Var PATHONE

Обратите внимание, у вас есть:

!define PATHONE ""

Так что будьте осторожны, чтобы не запутать двух.

...