Setting Speicherort

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 26 Antworten in diesem Thema. Der letzte Beitrag () ist von VB1963.

    Setting Speicherort

    Hallo zusammen,
    ich habe mich mal an den My. Setting versucht.
    Abgelegt werden die Settings ja in einer Datei welche in Appdata/Local/Programmname/OrdnerDerMrinProblemIst/1.0.0.0
    Nun ist mir aufgefallen das der Ordner der im ProgrammNameOrdner liegt als Namen eine Kombination aus Zahlen und Buchstaben hat.
    Woraus erstellt sich diese Kombination? Was hat sie zu bedeuten?
    Und woran liegt es das ich mehrere von diesen Ordnern habe? Wenn ich Änderungen am Programm vornehme und im Release kompiliere und das Programm starte muss ich immer die Settings neu befüllen? Ist das so richtig, oder kann man das abstellen.?
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Akanel“ ()

    ich glaub das ist komplizierter als nur die app.config.
    die app.config muss ja neben der exe liegen, und da besteht zur Laufzeit des Proggis kein Schreibrecht.
    Also müssen Settings mit Schreibrechten woanders gespeichert werden, wo das Proggi Schreibrechte hat, iwo in UserAppData.

    (soweit meiin Halbwissen)

    Akanel schrieb:

    Abgelegt werden die Settings ja in einer Datei welche in Appdata/Local/Programmname/OrdnerDerMeinProblemIst/1.0.0.0
    Nun ist mir aufgefallen das der Ordner der im ProgrammNameOrdner liegt als Namen eine Kombination aus Zahlen und Buchstaben hat.
    Diesen Problem?-Ordner kann man ermitteln...

    VB.NET-Quellcode

    1. Dim di As New DirectoryInfo(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath)
    2. If di.Parent.Parent.Exists Then '...
    Ich hab fast die vermutung das hier OneClick mit im Spiel ist. Das würde die Ordnerstruktur erklären.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Das ist ganz normal. Da werden die Settings abgelegt. Dein Problemordner ist ein Hash des Pfades. Bei mir liegts unter AppData\Local\CompanyName\*Name*.exe_Url_*Hash*\Version. Erhöhst du die Version, dann haste ne neue Settingsdatei. Du kannst Vorgängerversionen mit Settings.Upgrade() migrieren.
    Hallo,
    Also OneClick ist hier nicht im Spiel. Es geht auch nicht darum den Ordner auszulesen.
    Als Settings bezeichne ich das was auf folgendem Bild zu sehen ist.

    Gespeichert werden die Settings dann in der user.config
    Diese liegt in dem oben beschriebenen Ordner.

    Mein Problem sind die Ordner auf dem folgenden Bild.

    Ich weiss das jedesmal ein neuer Ordner angelegt wird sobald die Versionsnummer geändert wird. In meinem Fall aber ist die Version nicht geändert worden.
    Wodurch wird denn hier noch ein neuer Ordner angelegt?

    Danke @Gonger96, ich glaube damit kann ich das Problem lösen. Ich werde es testen.
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    @VB1963 Danke dir für den Link, ich werde mir das mal ansehen.

    Meine eigentliche Frage war wann immer der Ordner mit dem Hash neu gesetzt wird (ausser beim ändern der Versionsnummer).
    Bei jedem Update des Programms? Auch wenn keine Versionsnummer geändert wird?
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.

    Akanel schrieb:

    Meine eigentliche Frage war wann immer der Ordner mit dem Hash neu gesetzt wird (ausser beim ändern der Versionsnummer).
    Wenn noch kein Ordner vorhanden ist, wird natürlich ein neuer Hash-Ordner mit seinem Unterordner mit der Version und User.config.xml erstellt, wenn du die Settings zum ersten mal bedienst - das ist klar...
    Ein Hash-Ordner wird auch erstellt, wenn du von Debug auf Release umstellst
    Ein Hash-Ordner wird auch erstellt, wenn du die Projektplattform änderst (x86, x64, AnyCPU …)
    Ich könnte mir auch vorstellen, dass der Hash zum Dateipfad gehört. Verschiebst du die exe dann wird ein neuer Ordner erstellt. So könnte man das gleiche Programm an verschiedenen Speicherorten mit verschiedenen Settings haben. Ist aber nur Vermutung, müsste man mal testen.

    Gonger96 schrieb:

    Ist aber nur Vermutung, müsste man mal testen.

    Und genau das ist es wieder warum ich diese Settings irgendwie nicht mag. Klar, ist geschmacksache. Ist eben einfach weil man "drauf los speichern" kann. Aber da mach ich mir echt lieber ne Klasse in welcher ich meine Properties habe und die Serialisiere ich einfach nach XML. Ist ne Zeile Code.
    Und ICH entscheide wann und ob ein neuer Ordner erstellt wird. =O

    Schöne Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ich habe mal die von euch genannte Gründe überprüft, und es passt so wie ihr es geschrieben habt.
    Bei mir war der Grund das wechseln von Debug und Release.

    Wenn man aber ein Update des Programmes macht wird auch ein neuer Ordner erstellt.
    Dazu gibt es dann Settings.Upgrade() wo mit ich die alte Version oder einzelne Teile migrieren kann.

    Das Thema hat sich damit für mich erledigt.

    @Nofear23m
    Mir ist bewusst das Settings nicht die beste Wahl sind. In meinem Fall hatte es aber ausgereicht.
    Der Grund warum ich mich damit intensiver beschäftige ist, ich möchte wissen wie es funktioniert und warum viele schreiben das man es nicht nutzen soll.
    Nur zu lesen "Lass die Finger davon" reichte mir nicht. Nun ich habe einen gravierenden Grund gefunden und kann es nachvollziehen.
    @VB1963 hat dazu eine alternative welche ich auch noch testen werde.
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    Ich hätte da noch mal ein Frage zu Settings.Upgrade()

    Ich habe noch gelesen das man sich ein Boolean Flag in den Settings machen soll, ob Settings.Upgrade() ausgeführt werden soll oder nicht.
    Als Beispiel wurde folgender Code genutzt, welcher in der ApplicationEvents.vb hinterlegt ist.

    VB.NET-Quellcode

    1. If (My.Settings.CallUpgrade) Then
    2. My.Settings.Upgrade()
    3. My.Settings.CallUpgrade = False
    4. My.Settings.Save()
    5. End If

    OK, zu beginn ist CallUpgrade auf True. Starte ich die Anwendung wird CallUpgrade aufgerufen, anschliessend auf False gesetzt und die Settings gespeichert.
    Erstmal OK.
    Aber wie Handhabe ich das nun bei dem nächsten Update? Da ist doch CallUpgrade auf False und es passiert nichts. Oder denke ich da gerade vollkommen falsch?

    Gibt es noch andere Möglichkeiten?
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.

    Akanel schrieb:

    Gibt es noch andere Möglichkeiten?
    Nimm statt eines Boolean eine Integer Versionsnummer.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!