2009-04-06 16 views
0

私はwebアプリケーションのインストーラにnsisを使用しています。ウィザードの1つのページで、私は3つのチェックボックスのうちの1つをユーザが選択するようにします。それぞれは2つの変数を異なる方法で設定する必要があります。 ... DATA_THREE data_three.zipnsisを使用してチェックボックスから選択肢を取得する

関数myfuncを を定義DATA_TWO data_two.zip を定義DATA_ONEのdata_one.zip を定義

:!!!ここ

は私が実行しようとしているコードです。 $ {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

私が持っている、それを実行しよう:

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

私は推測私が構築だファイルは、コンパイル時に定義されていないため、エラーがあります実行時にのみ実行されます。それが正しいか ?私はマクロを使うべきですか? この問題を解決するためのよりエレガントな方法は何ですか?

答えて

0

これらのファイルのうちの1つだけがそのインストーラで使用されることが分かっているなら、!defineと!ifdefとmaybe!systemを使用してコンパイル時の魔法を実行する必要がありますfileコマンドで変数)

ユーザー/エンドユーザーのマシンが選択を行っている場合は、あなたはすべての3つのファイルが含ま必要があります。

SetOutPath $instdir 
${If} $somevar == 1 
File "file1" 
${EndIf} 
${If} $someothervar == 1 
File "file2" 
${EndIf} 
... 
関連する問題