NSIS:如何检查var是否存在

时间:2012-11-20 10:10:37

标签: nsis

检查NSIS中是否存在var的最佳方法是什么?

目前我这样做:

${If} $NonExistentVar == $$NonExistentVar

但是如果现有var some_var的值为$some_var,这将无法正常工作,我知道这种情况很少见,但是,有更好的方法可以检查吗?

section non_existent_var
    detailprint "non existent: $NonExistentVar"
    var /global ExistentVar
    detailprint "existent: $ExistentVar"
    ${If} $NonExistentVar == $$NonExistentVar
        detailprint "PASS: NonExistent doesn't exist"
    ${Else}
        detailprint "FAIL: NonExistent exists"
    ${EndIf}

    ${If} $ExistentVar == $$ExistentVar
        detailprint "FAIL: ExistentVar doesn't exist"
    ${Else}
        detailprint "PASS: ExistentVar exists"
    ${EndIf}

    strcpy $ExistentVar "$$ExistentVar"

    ${If} $ExistentVar == $$ExistentVar
        detailprint "FAIL: ExistentVar doesn't exist"
    ${Else}
        detailprint "PASS: ExistentVar exists"
    ${EndIf}
SectionEnd

给出:

non existent: $NonExistentVar
existent: 
PASS: NonExistent doesn't exist
PASS: ExistentVar exists
FAIL: ExistentVar doesn't exist
Completed

1 个答案:

答案 0 :(得分:1)

为什么不使用定义?这是一个应该在编译时发生的检查。

!macro DeclareDetactableVariable name
!ifndef VAR_${name}
Var /Global ${name}
!define VAR_${name}
!endif
!macroend

!insertmacro DeclareDetactableVariable foo
!ifdef VAR_foo
...
!endif