2016-03-23 8 views
0

Ich versuche, ein Testinstallationsprogramm (EXE) auszuführen, das von NSIS generiert wird, während Befehlszeilenargumente bereitgestellt werden. Ich verwende GetParameters und GetOptions.NSIS GetOptions wirft einen Fehler, obwohl die Option vorhanden ist

Mein Code:

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 

und der Befehl verwendet, wenn diese ausgeführt wird:

installer.exe -pss

Ich erhalte Fail in der Textdatei, aber die Option ist in der Befehlszeile String. Was mache ich falsch?

Ich habe versucht mit /pss anstelle von -pss und das gibt mir immer noch einen Fehler. Ich habe auch lief den gleichen Code mit ein paar Änderungen:

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 

mit dem Befehl installer.exe -pss=true verwendet und die true wird in die Datei geschrieben, was bedeutet, $R1 einen Wert empfangend, aber ich bin immer noch ein Fehler.

Das große Ding hier ist, dass ich keinen tatsächlichen Wert benötige, aber muss nur sehen, ob die Option -pss verfügbar ist.

Kann mir jemand sagen, was ich falsch mache oder wo mein Missverständnis ist?

Antwort

1

Der erste IfErrors Parameter ist der Ort zu springen, wenn das Fehler-Flag gesetzt ist und Sie 0 verwenden, und das bedeutet kein Sprung, so dass Ihr Code ein wenig verwirrend ist.

Ich würde empfehlen, dass Sie sich wie diese relative Sprünge nicht verwenden, ein Etikett oder noch besser, verwenden Sie die 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

Das hat geklappt! Toller Mann, danke. Ich wusste von LogicLib, aber ich dachte, ich würde IfError zum Üben verwenden. Aber ich denke, es gibt nicht viel Sinn, wenn es viel bessere Möglichkeiten gibt, es zu tun. –

+0

Mein Missverständnis war, dass wenn "IfError" keinen Fehler zeigte, das erste Argument gemacht wurde. Nochmals vielen Dank, Mann! –

Verwandte Themen