我在安装程序中有一个部分,根据某些条件(存在注册表值),我试图将其设为强制性,但是我没有得到所期望的行为。
我正在尝试使用以下命令对节进行打勾和锁定:
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逻辑。
我似乎在此特定命令上找不到太多文档,但我有些困惑。有什么想法吗?
[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