NSIS如果Else语句带有x64标题抛出宏错误

时间:2014-05-14 21:07:17

标签: 64-bit nsis

当我在寻找如何查看Windows操作系统是32位还是64位的答案时,我偶然发现了另一个答案:Use NSIS to install 32bit...并使用了以下代码。

!include x64.nsh

Function .onInit
    #Determine the bitness of the OS and enable the correct section
    ${If} ${RunningX64}
        SectionSetFlags ${SEC0000}  ${SECTION_OFF}
        SectionSetFlags ${SEC0001}  ${SF_SELECTED}
    ${Else}
        SectionSetFlags ${SEC0001}  ${SECTION_OFF}
        SectionSetFlags ${SEC0000}  ${SF_SELECTED}
    ${EndIf}
FunctionEnd

但是,我遇到了这个错误:

!insertmacro: If
!insertmacro: macro named "_LOGICLIB_TEMP" not found!
Error in macro _RunningX64 on macroline 1
Error in macro If on macroline 5

我不确定那是什么。我认为它可能与LogicLib.nsh有关,但我使用完全相同的if,else语句,在同一个脚本中没有问题。所以,它让我相信它的x64.nsh库阻止了我。

1 个答案:

答案 0 :(得分:0)

我之前从未见过这个错误。除非您在包含x64.nsh和/或LogicLib.nsh之前在代码中的某处定义了LOGICLIB,否则您当前的代码应该可以正常工作。

尝试将它放在.nsi的顶部:

!ifdef LOGICLIB
!warning "LOGICLIB should not be defined here"
!undef LOGICLIB
!endif
!include LogicLib.nsh
!ifmacrondef _LOGICLIB_TEMP
!error "Corrupted LogicLib.nsh?"
!endif
!include x64.nsh