How to debug nsis script? 3.05-2 gives error: Error: unterminated string parsing line at macro:_IncludeStrFunction
How to debug nsis script? 3.05-2 gives error: Error: unterminated string parsing line at macro:_IncludeStrFunction
如何调试nsis脚本?
我已经从 Ubuntu 19.10 升级到 20.04,这似乎将 nsis 从 v3.04-1 更新到 v3.05-2。现在我的脚本出现错误:
# makensis installer.nsi
Processing config: /etc/nsisconf.nsh
Processing script file: "installer.nsi" (UTF8)
Error: unterminated string parsing line at macro:_IncludeStrFunction:7
Error in macro _IncludeStrFunction on macroline 7
!include: error in script: "../src/other/EnvVarUpdate.nsh" on line 49
Error in script "installer.nsi" on line 2 -- aborting creation process
我的脚本是这样的:
OutFile speedata-publisher-windows-386-3.9.14-installer.exe
!include "../src/other/EnvVarUpdate.nsh"
InstallDir $PROGRAMFILES\speedata-publisher
DirText "This will install speedata Publisher on your computer. Choose a directory"
Section
SetOutPath $INSTDIR
RMDir /r /REBOOTOK $INSTDIR
File /r /tmp/publisher-git/build/speedata-publisher\*.*
${EnvVarUpdate} [=11=] "PATH" "A" "HKCU" "$INSTDIR\bin"
WriteUninstaller $INSTDIR\Uninstall.exe
MessageBox MB_OK "Run speedata Publisher with 'sp' on the command.com prompt"
SectionEnd
Section "Uninstall"
${un.EnvVarUpdate} [=11=] "PATH" "R" "HKCU" "$INSTDIR\bin"
RMDir /r /REBOOTOK $INSTDIR
SectionEnd
并且 EnvVarUpdate.nsh
来自 https://nsis.sourceforge.io/Environmental_Variables:_append,_prepend,_and_remove_entries
此脚本中的第 49 行是 !insertmacro _IncludeStrFunction StrTok
我用之前版本3.04-1的命令输出是:
Processing config: /etc/nsisconf.nsh
Processing script file: "build/installer.nsi" (UTF8)
Processed 1 file, writing output (x86-ansi):
Output: "/tmp/publisher-git/build/speedata-publisher-windows-386-3.9.14-installer.exe"
Install: 2 pages (128 bytes), 1 section (4120 bytes), 1139 instructions (31892 bytes), 647 strings (11565 bytes), 1 language table (230 bytes).
Uninstall: 1 page (128 bytes), 1 section (4120 bytes), 385 instructions (10780 bytes), 100 strings (1387 bytes), 1 language table (194 bytes).
Datablock optimizer saved 650630 bytes (~1.8%).
Using zlib compression.
EXE header size: 75264 / 76288 bytes
Install code: 10537 / 45255 bytes
Install data: 34526923 / 62531730 bytes
Uninstall code+data: 2665 / 3163 bytes
CRC (0xFE2E922E): 4 / 4 bytes
Total size: 34615393 / 62656440 bytes (55.2%)
我不是很喜欢 nsis 脚本,所以我想知道如何找到问题所在。
StrFunc 的内部工作方式发生了变化,Wiki 中的第 3 方 EnvVarUpdate.nsh 文件与其不兼容。
正如所讨论的 here,您可以尝试通过将 !define un.${StrFuncName} "${Un${StrFuncName}}"
更改为来修复 EnvVarUpdate.nsh
!define un.${StrFuncName} '${Un${StrFuncName}}'
。
我建议您使用 EnVar plug-in 作为替代,而不是手动修补该文件。
如何调试nsis脚本?
我已经从 Ubuntu 19.10 升级到 20.04,这似乎将 nsis 从 v3.04-1 更新到 v3.05-2。现在我的脚本出现错误:
# makensis installer.nsi
Processing config: /etc/nsisconf.nsh
Processing script file: "installer.nsi" (UTF8)
Error: unterminated string parsing line at macro:_IncludeStrFunction:7
Error in macro _IncludeStrFunction on macroline 7
!include: error in script: "../src/other/EnvVarUpdate.nsh" on line 49
Error in script "installer.nsi" on line 2 -- aborting creation process
我的脚本是这样的:
OutFile speedata-publisher-windows-386-3.9.14-installer.exe
!include "../src/other/EnvVarUpdate.nsh"
InstallDir $PROGRAMFILES\speedata-publisher
DirText "This will install speedata Publisher on your computer. Choose a directory"
Section
SetOutPath $INSTDIR
RMDir /r /REBOOTOK $INSTDIR
File /r /tmp/publisher-git/build/speedata-publisher\*.*
${EnvVarUpdate} [=11=] "PATH" "A" "HKCU" "$INSTDIR\bin"
WriteUninstaller $INSTDIR\Uninstall.exe
MessageBox MB_OK "Run speedata Publisher with 'sp' on the command.com prompt"
SectionEnd
Section "Uninstall"
${un.EnvVarUpdate} [=11=] "PATH" "R" "HKCU" "$INSTDIR\bin"
RMDir /r /REBOOTOK $INSTDIR
SectionEnd
并且 EnvVarUpdate.nsh
来自 https://nsis.sourceforge.io/Environmental_Variables:_append,_prepend,_and_remove_entries
此脚本中的第 49 行是 !insertmacro _IncludeStrFunction StrTok
我用之前版本3.04-1的命令输出是:
Processing config: /etc/nsisconf.nsh
Processing script file: "build/installer.nsi" (UTF8)
Processed 1 file, writing output (x86-ansi):
Output: "/tmp/publisher-git/build/speedata-publisher-windows-386-3.9.14-installer.exe"
Install: 2 pages (128 bytes), 1 section (4120 bytes), 1139 instructions (31892 bytes), 647 strings (11565 bytes), 1 language table (230 bytes).
Uninstall: 1 page (128 bytes), 1 section (4120 bytes), 385 instructions (10780 bytes), 100 strings (1387 bytes), 1 language table (194 bytes).
Datablock optimizer saved 650630 bytes (~1.8%).
Using zlib compression.
EXE header size: 75264 / 76288 bytes
Install code: 10537 / 45255 bytes
Install data: 34526923 / 62531730 bytes
Uninstall code+data: 2665 / 3163 bytes
CRC (0xFE2E922E): 4 / 4 bytes
Total size: 34615393 / 62656440 bytes (55.2%)
我不是很喜欢 nsis 脚本,所以我想知道如何找到问题所在。
StrFunc 的内部工作方式发生了变化,Wiki 中的第 3 方 EnvVarUpdate.nsh 文件与其不兼容。
正如所讨论的 here,您可以尝试通过将 !define un.${StrFuncName} "${Un${StrFuncName}}"
更改为来修复 EnvVarUpdate.nsh
!define un.${StrFuncName} '${Un${StrFuncName}}'
。
我建议您使用 EnVar plug-in 作为替代,而不是手动修补该文件。