my.settings Informationen werden aus unerklärlichen Gründen gelöscht (vb.net)

  • WPF

Es gibt 34 Antworten in diesem Thema. Der letzte Beitrag () ist von dive26.

    @dive26 Schaltet Ihr die PCs hart aus?
    An welcher Stelle im Code hast Du denn das (laufzeitmäßig) letzte Settings.Save() eingebaut?
    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!
    Schaltet Ihr die PCs hart aus?

    Leider haben User das so an sich, dass die das machen was man nicht machen sollte. Bei 4000 Kunden hat man da keinerlei Einfluss drauf.

    An welcher Stelle im Code hast Du denn das (laufzeitmäßig) letzte Settings.Save() eingebaut?


    Die Programmausführung startet in einem Modul in der Prozedur "main". Diese erledigt einige Sachen und Ruft die Hauptform und einige andere auf. Dann werden am Ende (nachdem die Hauptform wieder geschlossen wurde) wieder in "main" die Settings gespeichert.

    Startpunkt Modul "Main"
    Auslesen von my.settings
    Starten von verschiedenen Forms für Signaturkarte, Fingerprint-Reader etc..
    Starten der Hauptform (von der dann alles ausgeht)
    Speichern von my.settings
    Programmende
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    @dive26
    Ist da ne USV dran?
    Wenn nicht, ist ein finales Speichern nicht möglich, denn das Programm wird ohne Vorwarnung aus dem sich verflüchtigenden Speicher geworfen.
    Da musst Du tatsächlich beim Ändern selbst jedes Mal die Settings speichern.
    ====
    Du kannst natürlich einen verschlüsselt abgespeicherten Logfile einführen, in dem alle Änderungen und das Runterfahren protokolliert werden.
    Wenn der vom Kunden editiert wird, sollte er nicht mehr lesbar sein.
    Liegt ein Fall nicht lesbarer Settings vor, lässt Du Dir den Logfile schicken und siehst nach, ob das Programm Runterfahren wurde. Wenn nicht, machst Du nen kostenpflichtigen Service-Einsatz. :thumbsup:
    Die Leute müssen natürlich darüber belehrt werden, dass sie den PC nicht ausschalten dürfen.
    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!
    USV? Gastronomen, Friseure, Nagelstudios ... Die sind froh wenn sie sich den PC für die Registrierkasse leisten können ;)
    Wir haben leider keinen Einfluss auf die verwendete Hardware, da wir nicht nur Komplettsysteme verkaufen, sondern zum großen Teil Softwarelizenzen.

    Also gibt es keine Möglichkeit um das Zerstören dieser Dateien zu verhindern. Ok. Aber zumindst wissen wir nun den Grund warum die zerstört werden und wir können unsere Kunden zumindest darauf hinweisen den PC erst abzuschalten wenn die Software beendet wurde.

    Danke jedenfalls. Wieder etwas gelernt.
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at

    dive26 schrieb:

    Leider haben User das so an sich, dass die das machen was man nicht machen sollte
    Für solche Fälle gibt es eine Beschreibung der Anwendung in der klargestellt werden muss, das das Beenden des PCs durch betätigen des Netzschalters oder 3 Sekunden langem drücken den An/aus Knopf, das Erzwingen des Herunterfahrens oder durch das Beenden der Anwendung durch den TaskManager keine Garantie gegeben werden kann, dass die Anwendung weiterhin korrekt Funktioniert. Für solche Fälle kann eben man keine Vorkehrungen treffen.

    Das einzige was du tun könntest, wäre die Settings-Datei beim Programmstart auf Fehler zu überprüfen, und dann eben die "Default" Einstellungen wiederherzustellen, wenn die Datei beschädigt ist. Dem User kannste dann noch eine (böse) Meldung ins Gesicht werfen.

    Edit : Zu spät
    Für solche Fälle gibt es eine Beschreibung der Anwendung

    Was nützt es wenn es in der Beschreibung steht, der User die Beschreibung aber nicht liest und dann dennoch beim Support anruft und Arbeitszeit "verbraucht". Generell haben wir kostenlosen Telefon- und Emailsupport (ist Teil unserer Geschäftsstrategie).

    Das einzige was du tun könntest, wäre die Settings-Datei beim Programmstart auf Fehler zu überprüfen, und dann eben die "Default" Einstellungen wiederherzustellen, wenn die Datei beschädigt ist. Dem User kannste dann noch eine (böse) Meldung ins Gesicht werfen.


    Das geht eben nicht, da .NET scheinbar die Settings lädt bevor der erste (eigene) Programmcode ausgeführt wird.
    Den Fehler beim Start abzufangen wäre schon ein großer Fortschritt.
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at

    dive26 schrieb:

    Das geht eben nicht, da .NET scheinbar die Settings lädt bevor der erste (eigene) Programmcode ausgeführt wird.
    Du kannst die Settings im Konstruktor der Main-Form lesen.
    Du kannst da auch den erwäähnten Logfile lesen, und wenn das Herunterfahren fehlt, kommt eine entsprechende Meldung und es werden die Default-Werte verwendet.
    Nach dem 3. Anruf haben die es gelernt. ;)
    ====
    Wenn die Leute Auto fahren, treten sie auch auf die Bremse und schalten den Motor aus, wenn sie in die Garage fahren. Sie fahren gewiss nicht an die Wand.
    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!
    Du kannst die Settings im Konstruktor der Main-Form lesen.


    Dem ist leider nicht so. Soweit kommts gar nicht. Die Anwendung startet gar nicht bis zu Main durch.
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at

    dive26 schrieb:

    Soweit kommts gar nicht
    Warum? Ich denk, Du machst das alles selbst?
    Kannst Du mal ne Settings-Definition und eine kaputte Settings-Datei posten?
    Oder ein Testprojekt, das den Effekt reproduziert.
    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!
    Was mache ich selbst? Wie ich schrieb, verwende ich die My.Settings Funktion von VB.NET.
    Den Effekt kannst Du jederzeit reproduzieren indem Du einfach das XML-Konstruckt der user.config zerstörst indem Du einfch ein paar Zeichen aus der Datei löscht.
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at

    dive26 schrieb:

    Was mache ich selbst?
    Dich um das Laden und Speichern kümmern, denn Du hast das Anwendungsframework deaktiviert.
    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!
    Ja klar, ändert aber daran auch nichts, dass die erste Zeile des Programmcodes bei "main" NICHT angesprungen wird, sobald die user.config beschädigt ist. Das Programm startet gar nicht (man sieht nur Kurz die Sanduhr und das wars) ....
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    Kannst Du von diesem Zustant ein kleines Testprojekt mit nem Testdatensatz machen, das den Effekt reproduziert?
    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!
    Ich habe den Fehler gefunden. Schon blöd von mir in der Deklaration schon auf die Settings zuzugreifen. Dann ist klar warum ich nie in die sub "main" gelange ...

    VB.NET-Quellcode

    1. Public FensterModus As Integer = My.Settings.Fenstermodus


    Problem gelöst. Nun kann ich den Fehler abfangen und eine Meldung ausbringen bzw. die Einstellungen auf Default zurückstellen.
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at