使用nsJSON插件(NSIS)读取和更新JSON文件

使用nsJSON插件(NSIS)读取和更新JSON文件,nsis,nsjsonserialization,electron-packager,Nsis,Nsjsonserialization,Electron Packager,我正在尝试使用nsJson插件更新JSON文件中的一个数据 文件中的JSON数据 { "header_left_lebel": "LEFT LEBEL", "header_center_label": "CENTER LEBEL", "base_path": "E:\Workspace\my-demo-app" } 我想在安装应用程序期间编辑基本路径 我的代码用于读取和更新值 Section "Installation Section" SetOutPath "$I

我正在尝试使用nsJson插件更新JSON文件中的一个数据

文件中的JSON数据

{   "header_left_lebel": "LEFT LEBEL",
    "header_center_label": "CENTER LEBEL",
    "base_path": "E:\Workspace\my-demo-app"
}
我想在安装应用程序期间编辑基本路径

我的代码用于读取和更新值

Section "Installation Section"
    SetOutPath "$INSTDIR" 

    GetFullPathName $0 ..
    StrCpy $installationPath "$0\${applicationName}";This Holds the installation path

    nsJSON::Set /file `$installationPath/config/settings.json`
    nsJSON::Set `base_path` /value `"$installationPath"`
    nsJSON::Serialize /file `$installationPath/config/settings.json`

   WriteUninstaller "$INSTDIR\Uninstall.exe"
SectionEnd
上面的代码更新JSON文件,但它只保留base\u路径

我想保留所有数据,只更新基本路径


如果您有任何帮助或链接,我们将不胜感激。

在使用NSIS v3.04和JSON插件v1.1.1.0(2017年11月)时,您的代码对我来说运行正常:


我在“C”驱动器上安装应用程序时遇到一些权限问题。这就是更新不起作用的原因。我通过使用“AccessControl::GrantOnFile”修复了这个问题。您的代码也正常工作。谢谢:)我确信可以为当前代码添加更好的错误处理,今晚我将尝试这样做。
Unicode True

!macro DumpTxtFile file
Push "${file}"
Call DumpTxtFile 
!macroend
Function DumpTxtFile 
Exch $0
Push $1
FileOpen $0 $0 r
loop:
    ClearErrors
    FileRead $0 $1
    IfErrors done
    DetailPrint $1
    Goto loop
done:
FileClose $0
Pop $1
Pop $0
FunctionEnd

!include LogicLib.nsh
Section
FileOpen $0 "$temp\NSIStest.json" w
FileWrite $0 '{   "header_left_lebel": "LEFT LEBEL",$\r$\n'
FileWrite $0 '    "header_center_label": "CENTER LEBEL",$\r$\n'
FileWrite $0 '    "base_path": "E:\Workspace\my-demo-app"$\r$\n'
FileWrite $0 '}'
FileClose $0
!insertmacro DumpTxtFile "$temp\NSIStest.json"

Var /Global installationPath
StrCpy $installationPath "c:\dummy\path"

ClearErrors
nsJSON::Set /file `$temp\NSIStest.json`
nsJSON::Set `base_path` /value `"$installationPath"`
nsJSON::Serialize /format /file `$temp\NSIStest.json`
${If} ${Errors}
  Abort "Unable to update JSON file!"
${EndIf}

!insertmacro DumpTxtFile "$temp\NSIStest.json"
SectionEnd