Programm stürzt nach einiger Zeit ab

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

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von KingLM97.

    Programm stürzt nach einiger Zeit ab

    Hallo,

    ich habe hier ein eigens entwickeltes Programm, welches von etwa 15 Usern gleichzeitig verwendet wird. Dafür liegt es auf einem Netzlaufwerk und ist Standardmäßig per Verknüpfung im Autostart. Das funktioniert auch alles einwandfrei. Wenn man das Programm nicht nutzt ist es im Systemtray und öffnet sich per simplen Mausklick. Bedient man es nun für kurze Zeit, nachdem es für einige Zeit inaktiv war, stürzt es einfach ab. Ich bekomme auch keine Fehlermeldung, Windows sagt einfach, dass das Programm nicht funktioniert und ich kann es beenden. Ich habe auch nicht die Auswahl, es zu debuggen.
    Auch habe ich von DevExpress "Logify" eingebaut, welches aber ebenfalls keine Fehlermeldung anzeigt. Alles was ich finden konnte, ist ein Bericht in der Ereignisanzeige (s. Anhang). Dort steht, dass auf eine "leere" Datei nicht zugegriffen werden kann. Das ist aber irgendwie nicht möglich, denn ich benötige nur beim ersten Start des Programmes die App.config, in der die relevanten Einstellungen hinterlegt sind. Diese speichere ich dann in einer Klasse und greife so darauf zu. Wieso also wird versucht auf eine Datei zu zugreifen?

    Ich starte das Programm auch über die Sub Main, dieses Event hilft mir leider auch nicht weiter.


    Über jede Hilfe bin ich sehr dankbar.

    Grüße.
    Bilder
    • 2018-01-29.png

      43,04 kB, 1.372×539, 201 mal angesehen
    Tja, so ist das eben halt wenn man ein Programm von einer Netzwerkressource startet anstatt dieses Sauber lokal abzulegen.

    Du könntest mal versuchen mit procdump beim Crash einen Dump zu schreiben und diesen dann zu analysieren. Da solltest du sehen was als letztes vom Programm gemacht wurde
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    @MrTrebron Das stimmt nur bedingt, ob die Anwendung von einem Netzlaufwerk gestartet wird oder nicht, ist irrelevant, solange bis von verschiedenen Prozessen/Usern schreibend auf die selbe Ressource zugegriffen wird, aber das führt auch lokal zu Problemen.
    Ich vermute da eher das das wieder mit dieser VB.Net Eigenheit zu tun hat: Debuggen, Fehler finden und beseitigen
    Es stürzt auch ab, wenn nur ein User es verwendet.
    Wie auch bereits gesagt, man kann es eine kurze Zeit verwenden und dann stürzt es ab.

    Ich wüsste auch nicht wie ich das Debuggen soll. Es tritt ja einfach so auf, an verschiedensten Stellen im Programm. Sobald ich im Debug oder Releasebuild über Visual Studio das Programm starte, stürzt es nicht ab. Egal, wie lange das Programm im Systemtray inaktiv bleibt. DLLs sind auch alle vorhanden, .NET Framework ebenfalls überall auf dem neuesten Stand.

    KingLM97 schrieb:

    Bedient man es nun für kurze Zeit, nachdem es für einige Zeit inaktiv war
    Ohne meine Glaskugel würde ich mal schätzen, dass in irgendwelchen User-Aktionen auf geöffnete ggf. ferne Dateien zugegriffen wird, die vom System wegen Nicht-Aktivität aus dem Cache geworfen wurden.
    Das Nachladen einer vermeintlich offenen Datei dauert dann zu lange und es knallt.
    Falls ja:
    Ermittle die Idle-Time und schließe und öffne die Dateien, wenn das Idle eine gewisse Dauer überschritten hat.
    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

    im ganzen Programm arbeite ich nicht mit einer einzigen Datei, weder lesen, noch schreiben.
    Höchstens einmal beim starten, wie im Eingangspost beschrieben.

    @MrTrebron
    Werde ich mir morgen mal anschauen. Danke für den Tipp.
    @KingLM97 Kannst Du das Projekt mal anhängen?
    Kommt der Effekt auch lokal?
    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
    Kann das Projekt leider nicht anhängen, da es zusammen mit einer SQL-Datenbank einer Warenwirtschaft arbeitet.

    Lokal (sprich, wenn ich es durch Visual Studio Debugging laufen lasse) tritt das Problem nicht auf.
    Als aller aller letzten Versuch (nach dem Versuch von EaranMaleasi) könntest Du das probieren:
    Erstelle eine Kopie des Projektes. Schmeiß nach und nach Teile raus, bis das Problem nicht mehr auftritt.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    KingLM97 schrieb:

    Windows sagt einfach, dass das Programm nicht funktioniert und ich kann es beenden.


    Ich kenne dieses Verhalten, wenn das Programm zu lange braucht um "etwas zu tun". Sprich, bei zeitintensiven Operationen. Gibt es solche bei dir im Programm?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @mrMo
    An den Stellen, an denen es bisher immer abgestürzt ist, gab es keine aufwendigen Operationen. Das war meistens simple Eingabe von Daten oder selektieren von Daten.

    @Niko Ortner
    Wird aufwendig, werde ich aber nach dem Versuch des "globalen" Try-Catch von @EaranMaleasi mal probieren.

    @MrTrebron
    Und gleich wird mit Procdump getestet.
    Ich lasse das Programm also die ganze Zeit laufen und sobald es abstürzt, erstelle ich einen Dump mit Procdump, habe ich das so richtig verstanden?
    Du lässt procdump schon laufen, während das Programm läuft
    procdump.exe -ma -e myAwesomeApp.exe C:\Temp\mydumpfile.dmp

    Prodump überweacht den Prozess und schreibt selbsttätig den Dump
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    So, Problem gefunden.

    Es war das Netzlaufwerk. Aus der Dumpfile konnte ich lesen, dass es ein Netzwerkproblem war. Also alles mögliche gecheckt, keine Probleme mit dem Netzwerk festgestellt.
    Irgendwann später kam ein Kollege dann auf das Netzlaufwerk, also in die Domäneneinstellungen geschaut und siehe da, es war eingestellt, dass sich das Netzlaufwerk nach einiger Zeit trennen soll und wieder automatisch verbinden soll. Ist das passiert und danach startete man mein Programm, ist es abgestürzt.

    Vielen Dank für die Hilfe!
    :)

    KingLM97 schrieb:

    im ganzen Programm arbeite ich nicht mit einer einzigen Datei, weder lesen, noch schreiben.


    KingLM97 schrieb:

    Es war das Netzlaufwerk.

    Das wiederspricht sich irgendwie. Mit solchen angaben können alle hier nur im dunkeln tappen.

    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. ##

    @Nofear23m
    Wie bereits geschrieben, ich lese nur Einstellungen beim ersten Start aus. Danach benötige ich einfach keine Dateien, weder lesen noch schreiben.

    Was ich mir nur erklären kann ist folgendes:
    Windows legt das Programm irgendwann in den Cache. Da es aber inaktiv ist, schmeißt Windows es wieder raus. Wird es jetzt aber wieder geöffnet, versucht Windows irgendwie das Programm neu zu laden, aber das Dauert dann zu lange und es crasht.
    Irgendwie sowas wird es vermutlich sein.

    Ich werde im laufe des Tages mal einprogrammieren, dass eine Schattenkopie erstellt wird und er diese Stattdessen startet. Sollte das Problem ja auch lösen sollen.