Nsis 在安装程序和卸载程序之间获取输入变量的共享函数

Nsis 在安装程序和卸载程序之间获取输入变量的共享函数,nsis,Nsis,如何修改以下语法,以便我的库函数可以在安装程序和卸载程序中使用?到目前为止,我只找到了一个不接受输入值的函数的示例。以下是一个很好的例子: 我还无法计算出语法,如果您希望传递变量,并且仍然使用安装程序和卸载程序的功能 /* FILE: MyFunctionLibrary.nsh */ Function MyFunction !define MyFunction"!insertmacro MyFunctionCall" !macro MyFunctionCall _VAR1

如何修改以下语法,以便我的库函数可以在安装程序和卸载程序中使用?到目前为止,我只找到了一个不接受输入值的函数的示例。以下是一个很好的例子:

我还无法计算出语法,如果您希望传递变量,并且仍然使用安装程序和卸载程序的功能

/* FILE: MyFunctionLibrary.nsh */

Function MyFunction
  !define MyFunction"!insertmacro MyFunctionCall"

  !macro MyFunctionCall _VAR1
    Push "${_VAR1}"
    Call MyFunction
  !macroend

  Exch $0
  MessageBox MB_OK $0
  Pop $0

FunctionEnd

/* FILE: MyInstallerScript.nsi */

/*...mui setup stuff...*/

!include "MyFunctionLibrary.nsh"

Section Install SEC01

  ${MyFunction} "install section"

SectionEnd

Section UnInstall SEC02

  ${MyFunction} "uninstall section"

SectionEnd

/*...other stuff...*/

这里发生了两件事。您需要生成这两个函数,这通常通过宏来完成。您还可以(可选)提供用于调用函数的辅助宏

最重要的步骤是创建函数:

; --- MyFunctionLibrary.nsh ---
!macro DeclareMyFunction un
Function ${un}MyFunction
Exch $0
DetailPrint "MyFunction: parameter=$0"
Pop $0
FunctionEnd
!macroend

; --- MyInstallerScript.nsi ---
!insertmacro DeclareMyFunction ""
Section
Push "Hello World"
Call MyFunction
SectionEnd

!insertmacro DeclareMyFunction "un."
Section Uninstall
Push "Hello World"
Call un.MyFunction
SectionEnd
通过在宏中只提供函数代码,还可以使用一种不太常见的方法:

!macro MyFunctionCode
Exch $0
DetailPrint "MyFunction: parameter=$0"
Pop $0
!macroend

Function MyFunction
!insertmacro MyFunctionCode
FunctionEnd
Function un.MyFunction
!insertmacro MyFunctionCode
FunctionEnd
帮助您调用函数的宏只需执行x次
推送
调用
您的函数或取消您的函数:

!macro DeclareMyFunction un
Function ${un}MyFunction
Exch $0
DetailPrint "MyFunction: parameter=$0"
Pop $0
FunctionEnd
!macroend

!define MyFunction "!insertmacro CallMyFunction"
!macro CallMyFunction Param1
Push "${Param1}"
!ifdef __UNINSTALL__
Call un.MyFunction
!else
Call MyFunction
!endif
!macroend

!insertmacro DeclareMyFunction ""
Section
${MyFunction} "Hello World"
SectionEnd

!insertmacro DeclareMyFunction "un."
Section Uninstall
${MyFunction} "Hello World"
SectionEnd
使用util.nsh可以抽象出一些细节:

!include Util.nsh

!macro MyFunction
Exch $0
DetailPrint "MyFunction: parameter=$0"
Pop $0
!macroend

!define MyFunction "!insertmacro CallMyFunction"
!macro CallMyFunction Param1
Push "${Param1}"
!insertmacro CallArtificialFunction MyFunction
!macroend

Section
${MyFunction} "Hello World"
SectionEnd

Section Uninstall
${MyFunction} "Hello World"
SectionEnd