NSIS nsJSON::delete 没有按预期工作

问题描述 投票:0回答:0

我有一个 json 配置文件作为我的 NSIS 安装程序的一部分进行更新。我需要根据用户的选择移除一棵树。

我尝试的大部分都是让安装程序崩溃。我搜索了论坛,我有最新版本的 nsJSON 插件(1.1.1.0)

这是 JSON 文件。我正在尝试完全移除“Kestrel”树:

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "Microsoft": "Debug",
      "Microsoft.Hosting.Lifetime": "Debug"
    }
  },
  "CAD_NIEM_CONNECTION": {
    "CAD_IFP_HOST": "10.1.1.1",
    "CAD_IFP_PORT": 9035
  },
  "NATS": {
    "URL": "nats://localhost:5222",
    "TOPIC": "NIEM_FEED",
    "CLUSTER": "project-dev"
  },
  
  "Kestrel": {
     "Certificates": {
            "Default": {
               "Path": \\https\\WebPoint.pfx
                        }
                   }
             },

  "AllowedHosts": "*",
  "urls": https://*:6001,
  "HTTPS_PORT": "6111"

}

这是我正在尝试使用的代码:(其中带有用于调试目的的消息框,以确保崩溃发生的时间)

ClearErrors
nsJSON::Set /file `$INSTDIR\config\NIEMIngestToStream-DEFAULT.appsettings.json`
nsJSON::Set `NATS` `URL` /value `"$NATSURL"`
nsJSON::Set `NATS` `CLUSTER` /value `"$NATSCLUSTER"`
<snip>
${If} $URLPre == "https"
   nsJSON::Set `HTTPS_PORT` /value `"$WEBPORT"`
   nsJSON::Set `urls` /value `https://*:443`
${ElseIf} $URLPre == "http"

   nsJSON::Get /tree Kestrel /exists /end
   Pop $R0
   MessageBox MB_OK "Found Kestrel: $R0"
   nsJSON::Delete /tree "Kestrel" /end
   Pop $R1
   MessageBox MB_OK "Return from Delete Kestrel: $R1"
   nsJSON::Set `urls` /value `http://*:80`
   nsJSON::Set `HTTPS_PORT` /value `""`
${Endif}

nsJSON::Serialize /format /file `$INSTDIR\config\NIEMIngestToStream.appsettings.json`
${If} ${Errors}
  Abort "Unable to update JSON file!"
${EndIf}

这会导致安装程序崩溃。我尝试过使用和不使用 /tree 参数。

想法?抱歉,我不是 JSON 专家。

我尝试过其他几篇文章中的语法。大多数人对旧版本的插件有问题,但据说这个版本修复了调用 nsJSON::delete 时的崩溃

nsis
© www.soinside.com 2019 - 2024. All rights reserved.