2016-03-23 37 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顯示沒有錯誤時,第一個參數完成。再次,謝謝你! –

相關問題