nsis脚本示例:
(--helpers.nsh--)
!define CreateSymbolicLinkFolder "!insertmacro CreateSymbolicLinkFolder"
!ifdef CreateSymbolicLinkFolder_ ; <--- always false
Function CreateSymbolicLinkFolderFunc
Exch $0 ; _TARGET
Exch 1
Exch $1 ; _JUNCTION
IfFileExists "$0" 0 done
${GetParent} "$1" $R0
CreateDirectory "$R0"
System::Call "kernel32::CreateSymbolicLinkW(w `$1`, w `$0`, i 1) i .s"
done:
Pop $R0
Pop $1
Pop $0
FunctionEnd
!endif
!macro CreateSymbolicLinkFolder _JUNCTION _TARGET
!define CreateSymbolicLinkFolder_ ; <--- not work...
Push "${_JUNCTION}"
Push "${_TARGET}"
Call CreateSymbolicLinkFolderFunc
!macroend
(--sample.nsi--)
!include "helpers.nsh"
...
Function Clean
${CreateSymbolicLinkFolder} "$APPDATA\SOMEPATH" "$EXEDIR\Data"
FunctionEnd
Section "Main"
Call Clean
SectionEndNsis错误:
错误:在“清洁”函数中解析安装函数"CreateSymbolicLinkFolderFunc“
注意:卸载函数必须以“un”开头,而安装函数则不能开头。
如何在宏CreateSymbolicLinkFolder_中正确定义CreateSymbolicLinkFolder?
当我不需要调用宏CreateSymbolicLinkFolder_时,"!ifdef CreateSymbolicLinkFolder“代码是为了避免nsis警告:
安装函数"CreateSymbolicLinkFolder_“(未引用)--零代码
发布于 2016-04-26 19:03:08
当您不向我们展示错误信息中的函数时,您的问题的第一部分当然有点难回答!
第二部分应该很明显,您在CreateSymbolicLinkFolder_检查之前定义了!ifdef CreateSymbolicLinkFolder_,所以它始终是真的,并且函数总是存在的,所以如果不调用它,就会收到警告。
你应该这样重写它:
!include Util.nsh
!include FileFunc.nsh
!macro CreateSymbolicLinkFolderImplementation
Exch $0 ; _TARGET
Exch 1
Exch $1 ; _JUNCTION
IfFileExists "$0" 0 done
${GetParent} "$1" $R0
CreateDirectory "$R0"
System::Call "kernel32::CreateSymbolicLinkW(w `$1`, w `$0`, i 1) i .s"
done:
Pop $R0
Pop $1
Pop $0
!macroend
!macro CreateSymbolicLinkFolder _JUNCTION _TARGET
Push "${_JUNCTION}"
Push "${_TARGET}"
${CallArtificialFunction} CreateSymbolicLinkFolderImplementation
!macroend
!define CreateSymbolicLinkFolder "!insertmacro CreateSymbolicLinkFolder"
Section
${CreateSymbolicLinkFolder} "c:\foo" "c:\bar"
SectionEndhttps://stackoverflow.com/questions/36811368
复制相似问题