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

如何在NSIS中检查注册表分号分隔值是否含指定字符串并按需追加?

NSIS实现分号分隔字符串的子串检查与追加逻辑

核心实现步骤

  • 读取注册表中指定路径的分号分隔字符串
  • 检查目标子串是否存在于该字符串中
  • 若子串不存在,将其追加到原字符串末尾(保持分号分隔格式)
  • 将更新后的字符串写回原注册表位置

完整代码示例

; 自定义配置项,根据实际场景修改
!define REG_PATH "HKLM\Software\YourApplication"
!define REG_KEY "TargetList"
!define CHECK_SUBSTR "qwe" ; 需要检查的目标子串

MainSection
    ; 1. 读取注册表值,默认返回空字符串
    ReadRegStr $0 ${REG_PATH} ${REG_KEY}

    ; 2. 判断子串是否存在
    ; 处理原字符串为空的特殊情况
    StrCmp $0 "" AppendAction SkipAction
    ; 使用StrStr查找子串,返回空则表示不存在
    StrStr $1 $0 "${CHECK_SUBSTR}"
    StrCmp $1 "" AppendAction SkipAction

AppendAction:
    ; 3. 追加子串,保证格式正确
    ; 原字符串非空时,先添加分隔分号
    StrCmp $0 "" "" AddSeparator
    Goto DoAppend
AddSeparator:
    StrCat $0 ";"
DoAppend:
    StrCat $0 "${CHECK_SUBSTR}"

    ; 4. 将更新后的值写入注册表
    WriteRegStr ${REG_PATH} ${REG_KEY} $0

SkipAction:
    ; 子串已存在,无需执行任何操作
MainSectionEnd

细节说明

  • 若需要不区分大小写的子串检查,可将StrStr替换为StrStrI(需NSIS 3.0及以上版本支持)
  • 代码自动处理原字符串为空的边界场景,不会生成冗余的前置分号
  • 可通过修改REG_PATH、REG_KEY和CHECK_SUBSTR适配不同业务需求

内容的提问来源于stack exchange,提问作者cloud

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 19:02:33