4
...
!include "nsDialogs.nsh"
!include "MUI2.nsh"
!include "LogicLib.nsh"
!include "XML.nsh"
  !insertmacro "UpdateXml"
...
!insertmacro MUI_UNPAGE_LICENSE "${NSISDIR}\Docs\Modern UI\License.txt"
UninstPage custom un.PageReinstall
!insertmacro MUI_UNPAGE_CONFIRM
...

Function un.PageReinstall
...
${UpdateXml} "http://127.0.0.1/123.xml" "/XML/A" $321 ; line 232 
...
FunctionEnd

NSIS 日志:

!insertmacro:UpdateXmlCall 调用必须与以“un”开头的函数名称一起使用。在卸载部分。用法:调用function_name | [:label_name] 宏行 5 上的宏 UpdateXmlCall 错误 第 232 行脚本“G:\Basic.nsi”中的错误 - 中止创建过程

怎么了?

4

2 回答 2

10

卸载程序使用的函数必须以 为前缀un.,宏也是如此。

因此,如果您正在使用宏并且希望能够从安装程序和卸载程序中使用它,则必须将其插入 2 次(一次带有前缀,另一次不带有un.前缀)。

在脚本开头添加或替换!insertmacro "UpdateXml"by应该可以解决问题(前提是在中定义了宏)。!insertmacro un.UpdateXmlun.UpdateXmlxml.nsh

于 2012-10-11T10:00:30.217 回答
0

如何在卸载部分调用 nsi 函数的答案?显示如何使用宏避免函数重复:

!macro TestFunction UN
Function ${UN}TestFunction
   ;do stuff
FunctionEnd
!macroend
!insertmacro TestFunction "" 
!insertmacro TestFunction "un."

用途:

Section "Install"
  Call TestFunction
EndSection

Section "Uninstall"
  Call un.TestFuction
SecionEnd
于 2021-10-06T05:17:05.427 回答