Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   NSIS Installer schreibt nicht alles in XML Datei (https://www.delphipraxis.net/128745-nsis-installer-schreibt-nicht-alles-xml-datei.html)

TUX_der_Pinguin 5. Feb 2009 08:58


NSIS Installer schreibt nicht alles in XML Datei
 
Ich habe für meine Anwendung einen Installer gebaut mit dem Tool NSIS (Nullsoft Scriptable Install System) mit Hilfe
eines XML Plugins sollen ein paar Dinge während der Installtion in eine Einstellungsdatei gespeichert werden.

Ansich keine Sache, nur muß ich bei einem Knoten ein Attribut und auch den 'Text' ändern jedoch klappt immer nur eins
nicht beides. Ich hoffe jemand hat eine idee woran es liegen könnte.

Die XML Datei sieht folgender maßen aus...
XML-Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<settings>
    <app>
        <window maximized="true">
            <position left="15" top="45" width="1205" height="853" />
        </window>
        <Lang code="de" id="0" />
        <ExportDir />
    </app>
    <dbase>
        <localDataDir ProgDir="false" AppDir="true" Directory="false" />
        <remoteDataDir NetBackup="true">C:\Temp\DOH</remoteDataDir>
    </dbase>
</settings>

Im installer werden erst 3 RadioButtons abgefragt und dann die Attribute vom Knoten 'localDataDir' gespeichert
was auch soweit klappt. Im zweiten Schritt soll das Attribut 'NetBackup' vom Knoten 'remoteDataDir' auf "false"
gesetzt werden sowie der zuvor vom Anwender eingebene Pfad als Knoten Text gespeichert werden. Zur zeit Funktionier
nur letzters.

Code:
          ;Flags auslesen
          !insertmacro MUI_INSTALLOPTIONS_READ $TempResult "io.ini" "Field 3" "State"
          ${IF} $TempResult == 1
            StrCpy $bProgDir true
          ${ELSE}
            StrCpy $bProgDir false
          ${ENDIF}
         
          !insertmacro MUI_INSTALLOPTIONS_READ $TempResult "io.ini" "Field 4" "State"
          ${IF} $TempResult == 1
            StrCpy $bAppDir true
          ${ELSE}
            StrCpy $bAppDir false
          ${ENDIF}
         
          !insertmacro MUI_INSTALLOPTIONS_READ $TempResult "io.ini" "Field 5" "State"
          ${IF} $TempResult == 1
            StrCpy $bDirectory true
          ${ELSE}
            StrCpy $bDirectory false
          ${ENDIF}
         
        ;Verzeichnis für Geräte-Daten auslesen
          !insertmacro MUI_INSTALLOPTIONS_READ $Dir "io.ini" "Field 8" "State"
          StrCpy $bNetBackup false

        ;Einstellungen in XML Datei speichern...
        ${xml::LoadFile} "$DYNFILES\${FILE_DYN_SETTINGS}" $0

        ${xml::GotoPath} "/settings/dbase/localDataDir" $0
        ${xml::FirstChild} "" $0 $0
        ${xml::SetAttribute} "ProgDir" $bProgDir $0
        ${xml::SetAttribute} "AppDir" $bAppDir $0
        ${xml::SetAttribute} "Directory" $bDirectory $0

        ${xml::GotoPath} "/settings/dbase/remoteDataDir" $0
        ${xml::FirstChild} "" $0 $0
        ${xml::SetAttribute} "NetBackup" $bNetBackup $0
        ${xml::SetNodeValue} $Dir
       
        ${xml::SaveFile} "$DYNFILES\${FILE_DYN_SETTINGS}" $0

        ${xml::Unload}
Ich bin zur Zeit total ratlos wieso das eine klappt jedoch das andere nicht bzw. nicht beides zusammen.

TUX_der_Pinguin 6. Feb 2009 09:04

Re: NSIS Installer schreibt nicht alles in XML Datei
 
Langsam verzweifel ich an der Sache, wieso das so schwer ist ein paar Optionen in einer XML Datei zu ändern.

Bisher habe ich weder neue ideen oder einen Ansatz gefunden wie es gehen könnte.

TUX_der_Pinguin 9. Feb 2009 12:07

Re: NSIS Installer schreibt nicht alles in XML Datei
 
So ich habe endlich den Fehler gefunden es lag unter anderem an der Reihenfolge der einzelnen Befehle.

Um ein Attribut eines Knoten zu ändern, reicht es aus den Knoten anzuwählen mit "GotoPath" mit
SetAttribute läßt sich das Attribut dann entsprechend ändern. Will man den Text bzw. Knoten Wert
ändern so bedarf es einen aufruf von "FirstChild" hiermit wird das Textelement ausgewählt und mit
SetNodeValue kann man dieses Element ändern.

Code:
;load XML file
${xml::LoadFile} "$DYNFILES\${FILE_DYN_SETTINGS}" $0

;localDataDir
${xml::GotoPath} "/settings/dbase/localDataDir" $0
${xml::SetAttribute} "ProgDir" $bProgDir $0
${xml::SetAttribute} "AppDir" $bAppDir $0
${xml::SetAttribute} "Directory" $bDirectory $0

;remoteDataDir
${xml::GotoPath} "/settings/dbase/remoteDataDir" $0
${xml::SetAttribute} "NetBackup" $bNetBackup $0
${xml::FirstChild} "" $0 $1
${xml::SetNodeValue} $Dir

;save XML file
${xml::SaveFile} "$DYNFILES\${FILE_DYN_SETTINGS}" $0
${xml::Unload}


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz