Чтение и обновление файла JSON с помощью плагина nsJSON (NSIS)

Я пытаюсь обновить одни данные в файле JSON с помощью плагина nsJson.

Мои данные 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_path.

Я хочу сохранить все данные и обновить только base_path

Любая помощь или ссылки будут оценены.


person subrat71    schedule 27.08.2019    source источник


Ответы (1)


Ваш код работает правильно для меня при использовании NSIS v3.04 и подключаемого модуля JSON v1.1.1.0 (ноябрь 2017 г.):

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
person Anders    schedule 27.08.2019
comment
У меня возникла проблема с разрешением на установку приложения на диск C. Поэтому обновление не работало. Я исправил это, используя «AccessControl::GrantOnFile. Ваш код тоже работает. Спасибо :) - person subrat71; 29.08.2019
comment
Я уверен, что в текущий код можно добавить лучшую обработку ошибок, я постараюсь сделать это сегодня вечером. - person Anders; 29.08.2019