如何在NSIS脚本中添加文件选择输入框并解决File指令编译报错
问题原因
你混淆了NSIS的编译期指令和运行期指令:
File属于编译期指令,作用是打包安装包的时候,将你开发机上指定路径的文件打包到安装包内。- 你当前把
File写在了用户安装时才会触发的点击回调函数里,$LicenseFile是用户安装过程中选择文件才会赋值的运行时变量,编译阶段编译器根本无法读取这个变量的实际值,自然会报找不到文件的错误。
修复方法
把报错行的 File $LicenseFile 替换为运行期文件复制指令即可,建议额外增加目标目录创建逻辑避免复制失败:
CreateDirectory $INSTDIR\data CopyFiles $LicenseFile $INSTDIR\data
替换后OnBrowseForLicense函数对应段逻辑如下:
${If} $1 == "license.lic" StrCpy $LicenseFile $0 ${NSD_SetText} $LicenseFileInput $0 CreateDirectory $INSTDIR\data IfFileExists $LicenseFile 0 file_not_found CopyFiles $LicenseFile $INSTDIR\data file_not_found: ${Else}
修改后不会在打包阶段报错,同时也能实现用户选择授权文件后复制到安装目录的需求。
内容的提问来源于stack exchange,提问作者Gopal
相关产品推荐
相关产品推荐

