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

NSIS中nsJSON::delete删除Kestrel节点致安装程序崩溃求助

解决NSIS中nsJSON删除节点崩溃的问题

问题根源分析

1. 目标JSON存在语法错误

你提供的目标JSON有两处无效语法,这是导致nsJSON插件解析出错、进而引发崩溃的核心原因:

  • \"Path\": \\https\\WebPoint.pfx:路径字符串未加双引号,且反斜杠未正确转义,正确写法应为\"Path\": \"\\\\https\\\\WebPoint.pfx\"(JSON中反斜杠需用\\转义,NSIS脚本中还需再转义一次)
  • \"urls\": https://*:6001:URL字符串未加双引号,正确写法应为\"urls\": \"https://*:6001\"

无效的JSON结构会让插件解析逻辑异常,务必先确保原始JSON格式完全合规。

2. nsJSON Delete命令用法错误

你使用的nsJSON::Delete /tree \"Kestrel\" /end写法有误:对于根级节点的删除,无需使用/tree参数,该参数仅用于嵌套节点树的遍历定位,直接指定节点名称即可完成根节点删除。

修正后的代码示例

ClearErrors
; 加载JSON文件
nsJSON::Set /file `$INSTDIR\\config\\NIEMIngestToStream-DEFAULT.appsettings.json`
${If} ${Errors}
  MessageBox MB_OK "Failed to load JSON file!"
  Abort
${EndIf}

; 更新NATS节点
nsJSON::Set `NATS` `URL` /value `\"$NATSURL\"`
nsJSON::Set `NATS` `CLUSTER` /value `\"$NATSCLUSTER\"`

${If} $URLPre == \"https\"
   nsJSON::Set `HTTPS_PORT` /value `\"$WEBPORT\"`
   nsJSON::Set `urls` /value `\"https://*:443\"`
${ElseIf} $URLPre == \"http\"
   ; 检查Kestrel节点是否存在
   nsJSON::Get /exists `Kestrel`
   Pop $R0
   MessageBox MB_OK \"Found Kestrel: $R0\"
   
   ; 删除根级Kestrel节点
   nsJSON::Delete `Kestrel`
   Pop $R1
   MessageBox MB_OK \"Delete Kestrel result: $R1\"
   
   nsJSON::Set `urls` /value `\"http://*:80\"`
   nsJSON::Set `HTTPS_PORT` /value `\"\"`
${EndIf}

; 序列化并保存JSON
nsJSON::Serialize /format /file `$INSTDIR\\config\\NIEMIngestToStream.appsettings.json`
${If} ${Errors}
  Abort \"Unable to update JSON file!\"
${EndIf}

额外调试建议

  • 每次调用nsJSON命令后立即检查${Errors},提前捕获解析或操作错误,避免错误累积到序列化阶段崩溃
  • 先用JSON校验工具验证原始JSON文件的有效性,确保无语法错误
  • 测试时可简化代码,先只执行加载、删除、保存三个步骤,确认基础流程正常后再添加其他节点更新逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:57:51