You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:39:03