如何在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
相关产品推荐
相关产品推荐

