Was könnte dazu führen, dass eine .NET WinForms-Anwendung plötzlich ohne Dialog geschlossen wird?

Unsere WinForms-Anwendung wurde gelegentlich gelegentlich geschlossen. Es zeigt weder unseren eigenen Crash-Fehler-Submit-Dialog noch den Windows-Fehler-Submit-Dialog, er schließt nur und ist weg, oft wenn die Person afk war und nichts mit der Anwendung gemacht hat. Es scheint ein halb-seltenes Ereignis zu sein, vielleicht 2-3 Mal im Monat, und es ist bei mehr als einer Person passiert. Ich habe keine Ahnung, wo ich anfangen soll, einen Reprofall zu bekommen oder wo ich anfangen soll, das nachzuverfolgen.

C # .NET 2.0 Gemeldete Fälle sind auf Win XP

Hat jemand Ideen?

3
hinzugefügt bearbeitet
Ansichten: 2

3 Antworten

Stapelüberläufe aufgrund von unendlicher Rekursion sind eine große Ursache für das Beenden von Apps ohne Warnung. Sofern Sie nicht absichtlich einen stillen Exit verursacht haben, zeigen unbehandelte Ausnahmen (außer Stack-Überlauf) normalerweise eine Art von UI an, bevor die App beendet wird. Stack Overflow ist die häufigste Ausnahme (oops, sorry) zu dieser Regel.

Natürlich ist es aus nicht verwaltetem oder unsicherem Code fast sicher möglich, die Laufzeit in der richtigen Weise zu stören, um einen stillen Ausgang zu verursachen.

Die Vorschläge zur Instrumentierung und zum Windows-Ereignisprotokoll sind ebenfalls gut.

4
hinzugefügt
Es klingt wie es ist wahrscheinlich ein stiller Crash ist der Schuldige. Vielen Dank
hinzugefügt der Autor Davy8, Quelle

Ausnahmen führen dazu, dass eine App "verschwindet". Überprüfen Sie die Ereignisprotokolle, um festzustellen, ob etwas vorhanden ist.

Überprüfen Sie den Task-Manager, um festzustellen, ob der Prozess noch vorhanden ist, wenn das Fenster nicht mehr angezeigt wird. Ich hatte Explorer abstürzen und das Fenster nicht neu zeichnen, bis es Alt-Tabbed oder Switched-To (vom Task-Manager) war.

Überlassen Sie es den Nutzern nicht, um bequem zu vergessen, dass sie die App schließen. Sie möchten möglicherweise eine Protokollierungslogik in die App einfügen, um von Benutzern initiierte Schließungen zu protokollieren. Beim nächsten "Verschwinden" können Sie nach Protokolleinträgen suchen.

3
hinzugefügt
Die App ist noch nicht in "the wild", also kenne ich diese Benutzer gut genug, um darauf zu vertrauen, dass sie die App nicht selbst geschlossen haben (es passiert ein bisschen zu oft für bequeme Vergesslichkeit)
hinzugefügt der Autor Davy8, Quelle
Außerdem erstellt die App keine neue Instanz, wenn bereits ein anderer Prozess vorhanden ist, und sie konnten die App erneut öffnen, sodass sie in der Tat stumm abstürzte, aber im Allgemeinen sind dies gute Dinge, nach denen zu suchen ist.
hinzugefügt der Autor Davy8, Quelle

Sie können im FormClosing-Ereignis eine Logik hinzufügen, um den Benutzer zu fragen, ob dies das ist, was er wirklich tun möchte. Sie können dann das Closing-Ereignis abbrechen und Ihre Anwendung wird weiter ausgeführt, wenn alles in Ordnung ist. Wenn Sie dieses Problem immer wieder bemerken und es Ihre Logik niemals ausführt, müssen Sie sich im Debugger die Hände schmutzig machen.

0
hinzugefügt