【问题标题】:NSIS If Else statement with x64 header throwing macro errorNSIS If Else 语句与 x64 标头引发宏错误
【发布时间】:2014-05-14 21:07:17
【问题描述】:

当我在寻找如何确定 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 库阻止了我。

【问题讨论】:

  • 这是哪个 NSIS 版本?
  • 我用的是 2.9,后来升级到了 3.0。两者都有错误,但这是我拥有的库文件的问题。我需要这个 nsis.sourceforge.net/Include/LogicLib.nsh ,我拥有的另一个 lib 文件完全错误。
  • 2.9 于 2005 年发布,没有 x64.nsh!

标签: 64-bit nsis


【解决方案1】:

我以前从未见过这个错误。您当前的代码应该可以工作,除非您在包含 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

【讨论】:

  • 我解决了这个问题。它是什么,是我有一个名为 hte 的库,与我需要的东西相同,称为 LogicLib.nsh,它已经被 x64 调用。所以,我和我的一个朋友去寻找正确的,并找到了它。感谢您的帮助。
猜你喜欢
  • 2021-10-23
  • 2018-09-20
  • 1970-01-01
  • 2021-05-29
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
  • 2015-11-18
  • 2015-01-05
相关资源
最近更新 更多