2009-04-06 6 views
0

J'utilise nsis pour un installateur d'une application Web. Dans une page de l'assistant je veux que l'utilisateur choisisse l'une des trois cases à cocher: chacun d'entre eux doit définir deux variables de différentes manières.Utilisation de nsis pour récupérer des choix à partir des cases à cocher

Voici le code que je suis en train de courir:!

définir DATA_ONE data_one.zip définir DATA_TWO data_two.zip définir DATA_THREE data_three.zip

Fonction myfunc ... $ {NSD_GetState} $ RadioOne 1 $ {$ 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

Lorsque je tente de l'exécuter j'ai:

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

Je présume que l'erreur est parce que le fichier que je suis la construction n'est pas défini au moment de la compilation mais seulement à l'exécution. Est-ce correct ? Dois-je utiliser une macro? Quelle est la manière la plus élégante de résoudre ce problème?

Répondre

0

Si vous savez à la compilation qu'un seul de ces fichiers sera utilisé dans cet installateur, JAMAIS, alors vous devez faire un peu de magie de compilation avec! Define et! Ifdef et peut-être! System (Vous ne pouvez pas utiliser variables dans la commande de fichier)

Si la machine de l'utilisateur/utilisateur final fait le choix, alors vous avez besoin tous les 3 fichiers inclus:

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