如何根据条件使NSIS节成为强制性

问题描述 投票:0回答:1

我在安装程序中有一个部分,根据某些条件(存在注册表值),我试图将其设为强制性,但是我没有得到所期望的行为。

我正在尝试使用以下命令对节进行打勾和锁定:

SectionIn RO

我也有一个肯定存在的注册表值,但是以下两个代码块均导致该节被锁定并打勾...

ClearErrors
ReadRegStr $0 HKCU "Software\Test" "TestValue"
${If} ${Errors}
    SectionIn RO ; registry key not found
${Else}
    ; do nothing
${EndIf}
ClearErrors
ReadRegStr $0 HKCU "Software\Test" "TestValue"
${If} ${Errors}
    ; do nothing
${Else}
    SectionIn RO ; registry key was found
${EndIf}

因此,似乎两个控制路径都在执行,或者SectionIn命令正在超越if逻辑。

我似乎在此特定命令上找不到太多文档,但我有些困惑。有什么想法吗?

nsis
1个回答
0
投票

[SectionIn是一个属性,不能在运行时更改。

您应该在.onInit中使用节帮助程序宏:

Section "blah" S_1
SectionEnd

!include LogicLib.nsh
!include Sections.nsh
Function .onInit
 ... 
${If} ${Errors} 
  !insertmacro SetSectionFlag ${S_1} ${SF_RO} 
${EndIf} 
FunctionEnd
© www.soinside.com 2019 - 2024. All rights reserved.