即使选项存在,NSIS GetOptions也会抛出错误

时间:2016-03-23 18:53:55

标签: command-line installer nsis

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

我的代码:

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选项是否可用。

谁能告诉我我做错了什么或我的误解在哪里?

1 个答案:

答案 0 :(得分:2)

如果设置了错误标志并且您使用的是IfErrors并且没有跳转,那么第一个0参数就是跳转的位置,因此您的代码有点令人困惑。

我建议你不要使用这样的相对跳跃,使用标签甚至更好,使用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