我正在使用nsis作为webapplication的安装程序。在向导的一个页面中,我希望用户选择三个复选框中的一个:每个复选框都必须以不同的方式设置两个变量。
以下是我正在尝试运行的代码:
!定义DATA_ONE data_one.zip !定义DATA_TWO data_two.zip !定义DATA_THREE data_three.zip
功能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
当我尝试运行它时,我得到了:
File: "./$CUSTOMER_DATA" -> no files found.
Usage: File [/nonfatal] [/a] ([/r] [/x filespec [...]] filespec [...] |
/oname=outfile one_file_only)
我认为错误是因为构建的文件不是在编译时定义的,而是仅在运行时定义的。这是对的吗 ?我应该使用宏吗? 解决这个问题的更优雅的方法是什么?
答案 0 :(得分:0)
如果你在编译时知道在那个安装程序中只会使用其中一个文件,那么你需要用!define和!ifdef以及may!system(你不能使用变量)做一些编译时间魔术在文件命令中)
如果用户/最终用户的机器正在做出选择,那么您需要包含所有3个文件:
SetOutPath $instdir
${If} $somevar == 1
File "file1"
${EndIf}
${If} $someothervar == 1
File "file2"
${EndIf}
...