Command line NSIS GetOptions正在抛出错误,即使该选项存在

Command line NSIS GetOptions正在抛出错误,即使该选项存在,command-line,installation,nsis,Command Line,Installation,Nsis,我正在尝试运行NSIS生成的测试安装程序(.exe),同时提供命令行参数。我正在使用和 我的代码: FileOpen $0 "$InstDir\output.txt" w ${GetParameters} $R1 ${GetOptions} $R1 "-pss" $R2 IfErrors 0 +3 FileWrite $0 "Success" Goto done FileWrite $0 "Fail" done: FileClose $0 以及运行此命令时使用的命令: inst

我正在尝试运行NSIS生成的测试安装程序(.exe),同时提供命令行参数。我正在使用和

我的代码:

FileOpen $0 "$InstDir\output.txt" w

${GetParameters} $R1
${GetOptions} $R1 "-pss" $R2
IfErrors 0 +3
  FileWrite $0 "Success"
  Goto done
  FileWrite $0 "Fail"
done:

FileClose $0
以及运行此命令时使用的命令:

installer.exe-pss

我在文本文件中不断得到
Fail
,但选项在命令行字符串中。我做错了什么

我尝试使用
/pss
而不是
-pss
,这仍然会给我一个错误。我还对相同的代码进行了一些修改:

FileOpen $0 "$InstDir\output.txt" w

${GetParameters} $R1
${GetOptions} $R1 "-pss=" $R2 ;;revision
IfErrors 0 +3
  FileWrite $0 "Success = $R2" ;;revision
  Goto done
  FileWrite $0 "Fail = $R2" ;;revision
done:

FileClose $0
使用命令
installer.exe-pss=true
,将
true
写入文件,这意味着
$R1
接收到一个值,但我仍然收到一个错误

这里最重要的是,我不需要任何实际值,只需要看看-pss选项是否可用


有人能告诉我我做错了什么或者我的误解在哪里吗?

如果设置了错误标志并且您正在使用
0
,那么第一个
IfErrors
参数就是跳转的位置,这意味着没有跳转,因此您的代码有点混乱

我建议您不要像这样使用相对跳转,使用标签,甚至更好,使用LogicLib:

!include FileFunc.nsh
!include LogicLib.nsh

Section

${GetParameters} $R1
${GetOptions} $R1 "-pss" $R2
${IfNot} ${Errors}
    DetailPrint "-pss switch found"
${Else}
    DetailPrint "-pss switch NOT found"
${EndIf}

SectionEnd

如果设置了错误标志并且您正在使用
0
,则第一个
IfErrors
参数是跳转的位置,这意味着没有跳转,因此您的代码有点混乱

我建议您不要像这样使用相对跳转,使用标签,甚至更好,使用LogicLib:

!include FileFunc.nsh
!include LogicLib.nsh

Section

${GetParameters} $R1
${GetOptions} $R1 "-pss" $R2
${IfNot} ${Errors}
    DetailPrint "-pss switch found"
${Else}
    DetailPrint "-pss switch NOT found"
${EndIf}

SectionEnd

成功了!真棒,谢谢。我知道LogicLib,但我想我会使用IfError进行练习。但是我想没有更好的方法来解决这个问题,我的误解是当
IfError
没有显示错误时,第一个参数就完成了。再次感谢你,伙计!成功了!真棒,谢谢。我知道LogicLib,但我想我会使用IfError进行练习。但是我想没有更好的方法来解决这个问题,我的误解是当
IfError
没有显示错误时,第一个参数就完成了。再次感谢你,伙计!