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.

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

    Hallo liebe Programmiererkollegen,

    ich habe das Problem, dass ich immer wieder von Kunden angerufen werde, dass die .NET (vb.NET) Anwendung nicht mehr startet. Ist dies der Fall, dann liegt das Problem zu 99% immer daran, dass die Datei user.config fehlerhaft ist. Es ist zwar noch ein XML Grundcontainer drin, aber eben keine Einstellungen. Dies ist die Datei die die Daten von my-settings enthält.

    Erst wenn diese Datei gelöscht wird, startet die .NET Anwendung.

    Wenn die fehlerhafte Datei vorhanden ist, dann springt die Anwendung auch nicht in den Programmcode-Einsprungspunkt. Da wäre es ja ein leichtes eine entsprechende Fehlerroutine zu programmieren.

    Hat jemand ähnliche Erfahrungen und weis jemand wovon diese "fehlerhafte" Datei verursacht wird? Windows Updates oder andere Gründe?

    LG Roland
    Bilder
    • User.config.jpg

      249,98 kB, 870×484, 164 mal angesehen
    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
    @dive26Ich weiß nicht, wo bei WPF die Settings gelesen werden, wahrscheinlich im ApplicationFramework.
    Kannst Du mit einer falschen Datei bei Dir am Entwicklungsrechner nachvollziehen, was passiert?
    In welchem Pdfad liegt die? <-> Ist das die vom System generierte Settings-Datei oder hast Du einen eigenen Settings-Provider (diesen z.B.)?
    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!
    Wo die Datei liegt weis ich (bei jedem System anders). Lösche ich ein paar Zeichen aus der Datei (und zerstöre somit das XML-Konstruckt), dann gibt es bereits in der IDE eine unabfangbare Fehlermeldung.

    Es handelt sich um die vom System generierte Settings-Datei.
    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
    Da hat mir das System meinen Post editiert. :S
    @dive26 Probier mal, einen eigenen UserSettingsProvider zu verwenden, damit liegen die Settings neben der Exe.
    Gugst Du hier.
    Ist ganz easy, Du musst nur 2 Dateien zu Deinem Projekt hinzufügen und feddich.
    Settings.vb / MySettings.vb
    UserSettingsProvider.vb / UserSettingsProviderXml.vb.
    Oder
    Du schaltest das ApplicationFramework ab:

    und musst Dich um alles selbst kümmern, auch das Laden und Speichern der Settings, da kannst Du besser auf Exceptions reagieren.
    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!
    Danke Rod, das wäre dann der letzte Ausweg.
    Anwendungsframework ist bei mir ohnehin deaktiviert.
    Aber dennoch erklärt das nicht, warum diese config Datei immer wieder beschädigt wird.

    Hier wurde das Thema schon einmal angesprochen, aber auch keine Lösung gefunden: user.config
    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

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

    @dive26 Möglicherweiswe schreibt das Programm selbst den Müll rein.
    Rufst Du iwo mehrfach Settings.Save() auf?
    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!
    Rufst Du iwo mehrfach Settings.Save() auf?

    Schon möglich, dass settings.save mal in der selben Sekunde zweimal gefahren wird - hat das irgend einen Einfluss auf die Funktion?
    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 Ich denke, dass dabei die Datei zerstört werden könnte.
    Kannst Du den Effekt des Zerstörens bei Dir am Rechner reproduzieren?
    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!
    Das Gleiche Problem habe ich auch...
    Verschiedene Desktopvirtualisierungen mögen die Settings-Funktion von Visual Studio nicht...
    VM Ware View macht da extreme Zicken!
    Wenn der Virtualle PC ein herunterfahren erzwingt, kann oft die Setting "beim Beenden des Programms" nicht mehr so schnell geschrieben werden, wie der Rechner ausgeknipst wird.

    Ist zumindest das, was hier passiert.
    Seitdem ich das Saven der Settings nicht mehr zum Programmende durchführe, sondern manuell aufrufe, ist das Problem hier im Haus weg.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    eitdem ich das Saven der Settings nicht mehr zum Programmende durchführe, sondern manuell aufrufe, ist das Problem hier im Haus weg.

    Danke MemoAnMichSelbst. Ich denke das wird die Lösung sein.
    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:

    die Lösung

    dive26 schrieb:

    Schon möglich, dass settings.save mal in der selben Sekunde zweimal gefahren wird
    Das hast Du doch offensichtlich bereits implementiert.
    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!
    Das Problem ist ja nicht mit dem Zwischenspeichern behoben, sondern mit dem Verhindern des Speicherns beim Beenden.
    Es scheint so, dass die Virutelle Umgebung ein "ich fahr herunter Signal" an das Programm sendet, dieses dann brav versucht zu speichern und DABEI dann die Maschine einfach ausgeknipst wird. Hierdurch entsteht dann eine korrupte Settings Datei.
    Passiert nicht immer, aber so 1-2 Mal im Monat kam es vor.
    In der Regel bei denen, die nur den Monitor aus machen und dann nachts die Maschine sich selbst herunterfährt...
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Gespeichert werden die Settings in meinem Programm öfter und an verschiedenen Stellen.
    Das Speichern beim beenden ist aber nicht unbedingt erforderlich - daher kann ich das dort rausnehmen. Klingt plausibel.

    @MemoAnMichSelbst
    Du meinst .NET speichert selbständig ohne dass ich das verhindern könnte?
    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:

    Anwendungsframework ist bei mir ohnehin deaktiviert.
    Also Nein. Du musst Dich selbst kümmern.
    Probier mal dies:

    VB.NET-Quellcode

    1. Shared o As New Object
    2. Public Shared Sub SaveSettings()
    3. SyncLock o
    4. My.Settings.Save()
    5. End SyncLock
    6. End Sub

    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!
    Das ist ne Einstellung. Standardmäßig wird beim Beenden gespeichert. Musst du ausstellen.
    Heißt "My.Settings beim Herunterfahren speichern" und findest sich in den Anwendungseinstellungen
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    MemoAnMichSelbst schrieb:

    Musst du ausstellen.
    ist grau, wenn das AnwendungsFramework deaktiviert ist.
    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!
    Habe ich wohl überlesen, dass es generell bei ihm deaktiviert ist.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    VB.NET-Quellcode

    1. Shared o As New Object
    2. Public Shared Sub SaveSettings()
    3. SyncLock o
    4. My.Settings.Save()
    5. End SyncLock
    6. End Sub


    Was macht SyncLock in diesem Zusammenhang dann genau?
    Ich konnte nur herausfinden, dass SyncLock alle anderen Threads einfriert.
    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:

    SyncLock
    sorgt dafür, dass (speziell bei Multithread-Anwendungen) dieser Code nur sequenziell abgearbeitet werden kann, d.h. der Beginn der nächsten Schreiboperation erfolgt erst, nachdem die vorige Schreiboperation beendet wurde.
    Der Programmfluss wird mit SyncLock o angehalten, bis die Lock-Sperre mit End SyncLock beendet wurde.
    Dort kannst Du z.B. einen Haltepunkt reinsetzen und weißt, wer der Aufrufer ist.
    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!
    @RodFromGermany

    So habe ich die Funktion SyncLock auch verstanden, jedoch bin ich mir nicht im Klaren ob das etwas an meinem Problem beim Runterfahren des PC´s löst. Einen Doppelzugriff kann ich dadurch natürlich verhindern. Aber das löst mein Grundproblem nur wenn es auch an einem doppelten my.settings.save liegt. Ich denke eher, dass das am schnellen Runterfahren der neuen PC´s liegt (wie hier beschrieben: user.config) . Alle unsere Systeme sind mit SSD ausgestattet.
    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