首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >nsis错误:解析安装函数

nsis错误:解析安装函数
EN

Stack Overflow用户
提问于 2016-04-23 13:19:12
回答 1查看 1.4K关注 0票数 0

nsis脚本示例:

代码语言:javascript
运行
复制
(--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
SectionEnd

Nsis错误:

错误:在“清洁”函数中解析安装函数"CreateSymbolicLinkFolderFunc

注意:卸载函数必须以“un”开头,而安装函数则不能开头。

如何在宏CreateSymbolicLinkFolder_中正确定义CreateSymbolicLinkFolder?

当我不需要调用宏CreateSymbolicLinkFolder_时,"!ifdef CreateSymbolicLinkFolder“代码是为了避免nsis警告:

安装函数"CreateSymbolicLinkFolder_“(未引用)--零代码

EN

回答 1

Stack Overflow用户

发布于 2016-04-26 19:03:08

当您不向我们展示错误信息中的函数时,您的问题的第一部分当然有点难回答!

第二部分应该很明显,您在CreateSymbolicLinkFolder_检查之前定义了!ifdef CreateSymbolicLinkFolder_,所以它始终是真的,并且函数总是存在的,所以如果不调用它,就会收到警告。

你应该这样重写它:

代码语言:javascript
运行
复制
!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"
SectionEnd
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36811368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档