2016-03-23 34 views
0

我正在尝试运行由NSIS生成的测试安装程序(.exe),同时提供命令行参数。我正在使用GetParametersGetOptions尽管选项存在NSIS GetOptions抛出错误

我的代码:

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=truetrue被写入这意味着$R1是recieving值,但我仍然得到一个错误的文件。

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

任何人都可以告诉我我做错了什么或者我的误解是哪里?

回答

1

第一个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 
+0

这工作!太棒了,谢谢。我知道LogicLib,但我认为我会用IfError来练习。但是,我认为有很多更好的方法可以做到这一点并不重要。 –

+0

我的误解是,当IfEr​​ror显示没有错误时,第一个参数完成。再次,谢谢你! –

相关问题