2009-04-06 7 views
0

Ich verwende nsis für ein Installationsprogramm einer Webapplikation. Auf einer Seite des Assistenten möchte ich, dass der Benutzer eines von drei Kontrollkästchen auswählt: Jedes von ihnen muss zwei Variablen auf unterschiedliche Weise setzen.Mit nsis können Sie Optionen aus den Kontrollkästchen abrufen

Hier ist der Code, den ich zu laufen bin versucht +!

definieren DATA_ONE data_one.zip definieren DATA_TWO data_two.zip definieren DATA_THREE data_three.zip

Funktion myfunc ... $ {NSD_GetState} $ 1 $ radioOne $ {NSD_GetState} $ RadioTwo $ 2 $ { } $ NSD_GetState RadioThree $ 3

; The two variables i want to set 
    Var /GLOBAL CUSTOMER_DATA ; this should be a File (?) 
    Var /GLOBAL LENGTH_POS  ; this is a string 

    StrCpy $CUSTOMER_DATA ${DATA_ONE} ; default value 
    StrCpy $LENGTH_POS "" 

    ${If} $1 == ${BST_CHECKED}   
    StrCpy $CUSTOMER_DATA ${DATA_ONE} 
StrCpy $LENGTH_POS "3" 
    ${endif} 

    ${If} $2 == ${BST_CHECKED}  
    StrCpy $CUSTOMER_DATA ${DATA_TWO} 
    StrCpy $LENGTH_POS "" 
    ${endif} 

    ${If} $3 == ${BST_CHECKED}  
    StrCpy $CUSTOMER_DATA ${DATA_THREE} 
    StrCpy $LENGTH_POS "" 
    ${endif}  

; here the line i've got the error 
    File ${BUILD_DIR}/$CUSTOMER_DATA 

...

FunctionEnd

Wenn ich versuche, es zu laufen, was ich habe:

File: "./$CUSTOMER_DATA" -> no files found. 
Usage: File [/nonfatal] [/a] ([/r] [/x filespec [...]] filespec [...] | 
    /oname=outfile one_file_only) 

Ich nehme an dem Fehler ist, weil die Datei i Konstruktion bin nicht bei der Kompilierung definiert ist aber nur zur Laufzeit. Ist es richtig ? Sollte ich Makro verwenden? Was ist der elegantere Weg, um dieses Problem zu lösen?

Antwort

0

Wenn Sie zur Kompilierzeit wissen, dass nur eine dieser Dateien in diesem Installer verwendet wird, dann müssen Sie einige Kompilierungszauber mit! Definieren und! Ifdef und vielleicht! System (Sie können nicht verwenden Variablen in der Datei Befehl)

Wenn der Benutzer/End-Maschine des Benutzers wird die Wahl zu machen, dann müssen Sie alle drei Dateien enthalten:

SetOutPath $instdir 
${If} $somevar == 1 
File "file1" 
${EndIf} 
${If} $someothervar == 1 
File "file2" 
${EndIf} 
... 
Verwandte Themen