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