Programmfehler seit Windowsversion 1903

  • VB.NET
  • .NET 4.5

Es gibt 90 Antworten in diesem Thema. Der letzte Beitrag () ist von Westerwälder.

    Programmfehler seit Windowsversion 1903

    Hallo,

    versuche schon seit einigen Wochen einen Fehler in meiner Anwendung zu lokalisieren.
    Dieser tritt seitdem Windowsupdate auf Version 1903 auf.

    Nach Rechnerstart und dem Start meines Programmes (per Autostart oder normal) läuft zunächst alles wie es soll.
    Die Startaufgaben werden komplett erledigt.
    Nach etwa 70 Sekunden hängt sich das Programm auf.
    Auch wenn ich 5 Minuten nach dem booten starte, zeigt sich dieser Fehler.
    Startet ich es nun wieder erneut (ohne Recherneustart) läuft es ohne Fehler den ganzen Tag.

    Teilweise habe ich seitdem Windowsupdate auch Probleme mit Excel.
    Meine Druckdaten erledigt ich komplett über Excel, hier hängt sich das Programm auch schonmal auf, aber nicht immer.

    Denke seit dem Update arbeitet irgendwas nicht mehr richtig zusammen:

    Rechner: Windows 10 Pro, 64 bit
    Office (Accsess und Excel): Office 365 - 64 bit
    Microsoft Accsess database 2010 (German), hier habe die Microsoft Accsess database engine 2016 (Englisch) getestet, jedoch ohne Erfolg.
    Anwendung: VB 2017, 64 bit, Framework 4.5

    Weiss nicht mehr, wie ich diesen Fehler suchen soll.
    Gruß Markus
    @Westerwälder Was ist das für mein Programm?
    Kannst Du es im Stidio zum crashen bringen?
    Wie äußert sich der Crash?
    Hast Du einen globalen Fehlerhandler?
    Kannst Du die Quellen posten?
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Guten Abend Rod,

    Programm: Ist alles reingepackt, von Musikverwaltung bis Immobilienverwaltung; habe nur das eine für Alles
    Im Studio der gleicher Vorgang; Erstlauf friert ein --> Zweitlauf dann ok, kein Crash, friert nur ein
    Obwohl teilweise bei eingefrorener Form noch Prozesse laufen.
    Beispiel:
    Backup über robocopy zeigt Notify nach Beendigung. Form ist aber vorher nicht mehr ansprechbar.
    Habe das Backup deaktiviert, ändert nichts.
    Globaler Fehlerhandler nicht vorhanden.
    Gruß Markus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Westerwälder“ ()

    @Westerwälder Dann häng eine Console an das Programm und mach Testausgaben in allen relevanten Prozeduren.
    Kommunikation zwischen Console und Form
    Angehängte Console kann nicht direkt geschlossen werden.
    Eintritt loggen, Austritt loggen.
    Wenn Du mehrere Austritte hast, mach eine Prozedur InternDEINE_PROZEDUR, da kannst Du davor den Eintritt, danach den Austritt loggen.
    Das ist eine reine Fleißarbeit.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!

    Westerwälder schrieb:

    Hierbei stosse ich direkt auf einen Fehler:
    It isn't a bug, it's a feature. :D
    Das musst Du mit dem ITaskbarList-OLE-Interface machen,
    da must Du Dich mal hier durchfräsen: Angehängte Console soll nicht geschlossen werden können
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Im Grunde habe ich ein Journal, was alle relevanten Vorgänge aufzeichnet.
    Das Programm friert nach ca. 70 Sekunden ein.
    In dieser Phase soll es einfach nur noch die aktuelle Uhrzeit anzeigen.
    Weiss nicht was die Console da noch ausgeben soll?

    Edit:
    Habe gerade nochmals einen Rechner-Neustart durchgeführt.
    Im Taskmanager läuft die App noch, CPU-Auslastung schwankt.
    Denke das ist der Timer für die Uhrzeit-Ausgabe.
    Nach ca. 70 Sekunden friert die Form ein, welche zu diesem Zeitpunkt geöffnet ist.
    Bilder
    • Journal.png

      130,32 kB, 1.920×1.080, 115 mal angesehen
    Gruß Markus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Westerwälder“ ()

    Westerwälder schrieb:

    Weiss nicht was die Console da noch ausgeben soll?
    Wenn in eine Prozedur ein- nicht aber ausgetreten wurde, weißt Du, in welcher Prozedur der Hänger passiert. 8o
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    @Westerwälder Wenn Du die Dauer brauchst, ja.
    Ich meinte so was:

    Quellcode

    1. Log("Proc01 In")
    2. ' ... DEINE PROZEDUR 01
    3. Log("Proc01 Out")
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Habe die Auswertung in eine xml-Datei geschrieben, kann man besser kontrollieren (anstatt Konsole)
    Es hat wohl doch was mit dem Timer_Uhrzeit zu tun.

    Kontrolliere in einem Prüftimer:

    VB.NET-Quellcode

    1. Private Sub Timer_Programmtest_Elapsed(sender As Object, e As ElapsedEventArgs) Handles Timer_Programmtest.Elapsed
    2. Zeile = Datentabelle.NewRow
    3. Zeile("Timername") = "Timer_Datum"
    4. Zeile("Zeitpunkt") = Now.ToString
    5. Zeile("InBetrieb") = Kalender.Datum.Timer_Uhrzeit.Enabled
    6. Datentabelle.Rows.Add(Zeile)
    7. Speichern()
    8. End Sub


    Im Tick Event

    VB.NET-Quellcode

    1. Private Sub Timer_Uhrzeit_Tick(sender As Object, e As EventArgs) Handles Timer_Uhrzeit.Tick
    2. Datum_Kurz = Now.ToShortDateString
    3. Datum_Lang = MB.Funktion.Kalender_WochentagName(Now.DayOfWeek) & ", den " & Datum_Kurz
    4. Zeit_Kurz = Now.ToShortTimeString
    5. Zeit_Lang = Now.ToLongTimeString
    6. FormZeitpunkt = Datum_Lang & " " & Zeit_Lang
    7. Form_DatumZeit()
    8. If Einstellungen.Programm_Pruefmodus AndAlso ExeRuning Then
    9. With Daten.DatenXml.Programmtest
    10. .Zeile = .Datentabelle.NewRow
    11. .Zeile("Timername") = "Sub-Datum aus Timer aufgerufen "
    12. .Zeile("Zeitpunkt") = Now.ToString
    13. .Zeile("InBetrieb") = StartIni.WarteModus
    14. .Datentabelle.Rows.Add(.Zeile)
    15. .Speichern()
    16. End With
    17. End If
    18. End Sub


    In der Sub

    VB.NET-Quellcode

    1. Private Sub Form_DatumZeit()
    2. If Einstellungen.Programm_Pruefmodus AndAlso ExeRuning Then
    3. With Daten.DatenXml.Programmtest
    4. .Zeile = .Datentabelle.NewRow
    5. .Zeile("Timername") = "Sub-Datum Aufruf "
    6. .Zeile("Zeitpunkt") = Now.ToString
    7. .Zeile("InBetrieb") = StartIni.WarteModus
    8. .Datentabelle.Rows.Add(.Zeile)
    9. .Speichern()
    10. End With
    11. End If


    Nach etwa 70 Sekunden ruft der Timer_Uhrzeit die Sub Form_DatumZeit nicht mehr auf.
    Obwohl der Timer laut Prüfausgabe noch Aktiv ist.
    Dies passiert nur nach Rechner-Neustart.
    Bilder
    • Pruefaus.png

      100,6 kB, 1.920×1.080, 87 mal angesehen
    Gruß Markus
    @Westerwälder Dann weißt Du ja nun genau, wo Dein Programm hängen geblieben ist.
    Was soll der Quatsch mit dem Timer?
    Mach Dir eine Public Shared Log(comment As String)-Prozedur.
    In dieser Log-Prozedur hängst Du an eine Log-Datei den Kommentar und den Zeitstempel an:

    VB.NET-Quellcode

    1. File.AppendAllText(DEINE_LOG_DATEI, String.Format("{0} - {1}", DateTime.Now, comment))
    Der Aufruf erfolgt so:

    VB.NET-Quellcode

    1. SUB_FUNCTION DEINE_PROZEDUR(DEINE_PARAMETER)
    2. Log("DEINE_PROZEDUR - Eintritt")
    3. ' der Ablauf Deiner Prozedur
    4. Log("DEINE_PROZEDUR - Austritt")
    5. End SUB_FUNCTION
    Feddich
    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).
    VB-Fragen über PN / Konversation werden ignoriert!

    Westerwälder schrieb:

    nun weiß ich wo der Hänger ist.
    Verrätst Du es uns?
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Nein, kann ich leider nicht.
    Habe auch keinen Plan wie ich das lokalisieren soll,
    zumal stets ein Rechner-Neustart erforderlich ist.

    Vor dem Update auf Windowsversion 1903 war alles ok.
    Kann mein Code ja nicht so daneben sein.

    Edit:
    Denke ein globalen Fehlerhandler ist eine Möglichkeit.
    Muss mir das mal anschauen.
    Gruß Markus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Westerwälder“ ()

    RodFromGermany schrieb:


    VB.NET-Quellcode

    1. File.AppendAllText(DEINE_LOG_DATEI, String.Format("{0} - {1}", DateTime.Now, comment))
    Der Aufruf erfolgt so:

    VB.NET-Quellcode

    1. SUB_FUNCTION DEINE_PROZEDUR(DEINE_PARAMETER)
    2. Log("DEINE_PROZEDUR - Eintritt")
    3. ' der Ablauf Deiner Prozedur
    4. Log("DEINE_PROZEDUR - Austritt")
    5. End SUB_FUNCTION
    Feddich


    Gibt es auch die möglichkeit den Namen einer Function innerhalb der Function abzufragen?

    Also wenn ich eine Function aufrufe und ich dann in einer Messagebox z.B. MessageBox.Show (Function.Name) benutze?

    Danke
    Liebe Grüße,
    C.O.D.E

    Testautomatisierung (TA):

    5%
    Du findest meinen Beitrag Hilfreich? :thumbup: Dann drück auf Hilfreich!

    C.O.D.E schrieb:

    Gibt es auch die möglichkeit den Namen einer Function innerhalb der Function abzufragen?
    Die eigene Funktion
    ​System.Reflection.MethodBase.GetCurrentMethod.Name()
    oder die übergeordnete Funktion
    ​(New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @'petaod
    Nehmen wir an ich rufe von Form1 eine Function in einem Modul auf. Die Function in dem Modul möchte jetzt wissen von welcher Methode er aufgerufen wurde. Wie mache ich das ohne System.Reflection.MethodBase.GetCurrentMethod.Name immer als Variable mitzugeben? :)

    Danke
    Liebe Grüße,
    C.O.D.E

    Testautomatisierung (TA):

    5%
    Du findest meinen Beitrag Hilfreich? :thumbup: Dann drück auf Hilfreich!