My.Settings bei neuer Softwareversion übernehmen

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von DerSmurf.

    My.Settings bei neuer Softwareversion übernehmen

    Hallo, ich speichere einige Einstellungen eines Programms in den My. Settings.
    Wenn ich nun aber in den Projekteigenschaften Die Assembly- / Dateiversion ändere, sind beim nächsten Programmstart natürlich keine Settings mehr vorhanden. Gibt es eine Möglichkeit die "alten" Settings zu übernehmen?
    @Humax Das beste ist, Du speicherst die Settings an dem Ort ab, den Du selbst vorgeben kannst:
    UserSettingsProvider (Persistieren von UserSettings)
    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!
    Hallo, ich bekomme zwar gerade mit einem anderen Problem Hilfe hier im Forum und mag eigentlich nicht mehrere Sachen gleichzeitig machen, aber wenn der Thread noch nicht so alt ist, hat vielleicht auch der TE etwas davon, dass ich seinen Thread kapere :o)

    Ich habe nämlich das gleiche Problem wie der TE. Nach einem Update meines Programmes - mittels nUpdate - sind die Settings weg.
    Beim update wird in der Regel nur die Programm.exe durch eine neuere ersetzt.
    Gespeichert werden in den Settings DGV Spaltenbreiten als string ("15|50|75"), ca. 8 Settings gibt es.

    Nun habe ich den Code von @Cheffboss im Form_Load Event verwendet.
    Jedoch bekomme ich die Fehlermeldung: If Not My.Settings.Upgraded Then "Upgraded konnte nicht gefunden werden".
    Daher habe ich die Prüfung entfernt und verwende nur die eine Zeile: My.Settings.Upgrade()
    Das scheint zu funktionieren. Mit dieser Codezeile bleiben meine Spalten in den DGVs nach einem Update (nach einem ersetzen der Programm.exe) wie sie waren.

    Kann mir jemand erklären, was ich hier mache - was bewirkt diese Zeile?
    Bzw, wieso ist diese nötig (warum werden die Settings sonst überschrieben)?
    Wofür ist die Prüfung in @Cheffboss Code?
    Wäre in meinem Fall evtl. eine alternative Speicherung, wie z.B. von @RodFromGermany oben gezeigt ratsamer?
    Ich speichere die Version in My.Settings und vergleiche diese miteinander. Wird ein Unterschied festgestellt, wird ein Upgrade durchgeführt.
    So in etwa:

    VB.NET-Quellcode

    1. If My.Application.Info.Version.ToString <> My.Settings.Version Then
    2. My.Settings.Upgrade()
    3. My.Settings.Version = My.Application.Info.Version.ToString
    4. End If
    Wie bereits oben erwähnt.
    Muss man die Upgraded Settings als BOOLEAN erstellen.
    Dann kann man auf diese Zugreifen!
    Solange das nicht gemacht ist,
    kann das Programm nicht darauf zugreifen,weil es noch nicht existiert.
    Visual Basic.NET 8o
    MS-SQL
    8o
    Ja, sorry. Brett vorm Kopf - ist ja eigentlich ersichtlich...

    Magst du (ihr) mir noch verraten, wozu diese Prüfung dient?
    Also klar ich feuere My.Settings.Upgrade() nur dann wenn es auch Not tut.
    Aber warum nicht einfach bei jedem Programmstart?
    Und was genau macht My.Settings.Upgrade(), bzw. warum sind die Settings weg, wenn ich die exe ohne Upgrade() ersetze?
    @DerSmurf
    Die Prüfung ist da um nicht immer die Upgrade auszuführen.
    Sondern nur dann, wenn eine neue Version von deinen Programm gestartet wird.
    Das spart meiner Meinung nach Rechenleistung.
    Die Upgrade Methode fast alle Settings zusammen in eine Datei.
    Ohne dieses wäre der AppData Ordner voller „user.config“ Dateien, die keinen nutzen mehr haben.
    Und das System unnötigen Speicherplatz verliert(Sind aber meistens wenige MB).
    Das wäre meine Erklärung, bin gespannt was Ihr(die anderen) noch dazu sagt!
    :thumbup:
    Visual Basic.NET 8o
    MS-SQL
    8o
    Die Settings ist nicht weg, sondern wird nicht mehr verwendet. Für jede Programmversion, sogar abhängig ob im Debug-Modus oder Standard-Kompiliert, verwendet MS ein anderes / neues Verzeichnis.
    Diese Angaben sind ohne Gewähr denn tatsächlich habe ich keine Dokumentation dazu gefunden, aber meine Erfahrungen gemacht.
    Schau unter %LOCALAPPDATA%\<Name_deiner_App> und den folgenden Unterverzeichnissen nach.
    Settings.Upgrade() sorgt dafür, dass die Einstellungen der Vor-Version nicht verloren sind. Hier ist auch sichergestellt, dass es sich um eine neue Version handelt, die also gar keine echten User-Settings aufweisen konnte.

    Ich weiß nicht, ob ein permanentes Settings.Upgrade() nicht eher kontraproduktiv ist, habe ich nie ausprobiert. Ich könnte mir vorstellen, dass Du so dem Benutzer immer die Alt-Daten unterschiebst und er damit seine individuellen Änderungen (Position der Formen, Farben, whatever) gar nicht mehr wirklich setzen kann. Muss man mal ausprobieren wie sich das wirklich auswirkt.
    Jetzt kommt Licht ins dunkle :o)
    Den %LOCALAPPDATA%\ Ordner habe ich gefunden. Hier ist schön für jede Version ein Ordner, welche eine user.config enthält.
    Wenn ich die Version 1.0 habe und die exe durch Version 1.1 ersetze, macht also Settings.Upgrade nichts anderes als die User.config aus Ordner "1.0" in den Ordner "1.1" zu kopieren.

    Ich danke euch für die Erklärungen!