NSIS自定义安装页双目录选择控件取值校验异常如何解决
问题根因
你的校验逻辑失效的核心问题是InstallLocation_Leave函数中读取控件值的语法错误:${NSD_GetText}的第一个参数是控件句柄变量,NSIS 中读取变量值必须加$前缀,你漏写了这个符号,导致系统将控件名识别为普通字符串,无法正常读取输入框内的内容,$R0、$R1始终为空,所以一直触发必填校验。
你之前猜测的点击事件共用$R0的问题不存在:点击事件里的$R0是临时变量,选择路径完成后已经将结果写入了对应的输入框控件存储,不会影响后续读取。
修复方案
只需要修改.nsi脚本中InstallLocation_Leave函数的两行代码,给控件变量加上$前缀即可:
Function InstallLocation_Leave ; 修复:控件变量前添加$符号获取变量值 ${NSD_GetText} $hCtl_InstallLocation_FirstInstallDir_Txt $R0 ${NSD_GetText} $hCtl_InstallLocation_SecondInstallDir_Txt $R1 StrCpy $firstInstallPath $R0 StrCpy $secondInstallPath $R1 ; 后续校验逻辑保持不变 StrCpy $message "" ${if} $R0 == "" ${OrIf} $R1 == "" StrCpy $message "$message both folders are required $\r$\n" ${EndIf} ${if} $message != "" MessageBox MB_OK|MB_ICONQUESTION $message Abort ${EndIf} FunctionEnd
不需要调整对话框设计器配置,也不需要修改自动生成的.nsddef、.nsdinc文件,修改完成后重新编译安装包即可正常运行。
内容的提问来源于stack exchange,提问作者Vicky
相关产品推荐
相关产品推荐

