Ce ar putea cauza ca o aplicație .NET WinForms să se închidă fără sudură fără dialog?

Aplicația noastră WinForms a fost raportată ocazional doar prin închidere pe cont propriu. Nu afișează dialogul nostru de trimitere a erorilor de eroare, nici dialogul de eroare al ferestrei Windows, se închide și este plecat, adesea atunci când persoana a fost afk și nu face nimic cu aplicația. Se pare că este o apariție semi-rară, poate ca de 2-3 ori pe lună, și sa întâmplat cu mai mult de o singură persoană. Nu am nici o idee de unde să încep cu a obține un caz de reprograme sau de unde să încep să urmăresc acest lucru.

C # .NET 2.0 Cazurile raportate sunt pe Win XP

Oricine are idei?

3

3 răspunsuri

Depășirea stivei din cauza recurenței infinite reprezintă o cauză majoră de abandonare a aplicațiilor fără avertisment. Cu excepția cazului în care ați făcut ceva deliberat pentru a determina o ieșire silențioasă, atunci excepțiile nefolosite (altele decât suprapunerile în stivă) vor afișa în mod normal un fel de interfață utilizator înainte de închiderea aplicației. Depășirea stivei este cea mai comună excepție (oops, îmi pare rău) la această regulă.

Desigur, de la un cod nesupravegheat sau nesigur, este aproape sigur posibil să deranjați timpul de execuție în mod corect pentru a provoca o ieșire tăcută.

Sugestiile despre instrumente și analizarea jurnalului de evenimente Windows sunt de asemenea bune.

4
adăugat
Se pare că este cel mai probabil că un vinovat tăcut este vinovatul. Mulțumiri
adăugat autor Davy8, sursa

Excepțiile vor determina o aplicație să "dispară". Verificați jurnalele de evenimente pentru a vedea dacă există ceva.

Verificați managerul de activități pentru a vedea dacă procesul este încă prezent când fereastra dispare. Am avut un accident de explorator și nu reușesc să redescriu fereastra până când nu a fost Alt-Tabbed sau Switched-To (de la task manager).

Nu puneți trecut utilizatorii pentru a uita convenabil ei sunt închiderea app. Poate doriți să puneți o logică logică în aplicație pentru a înregistra concediile inițiate de utilizatori. Data viitoare când "dispare" puteți verifica orice intrări din jurnal.

3
adăugat
Aplicația nu se află în "sălbăticie", așa că știu acești utilizatori suficient de bine pentru a avea încredere că ei nu au închis aplicația în sine (se întâmplă prea des pentru o uitare ușoară)
adăugat autor Davy8, sursa
De asemenea, aplicația nu creează o instanță nouă dacă există deja un alt proces și au reușit să redeschidă aplicația, așa că într-adevăr sa prăbușit în tăcere, dar, în general, acestea sunt lucruri bune de verificat.
adăugat autor Davy8, sursa

Puteți adăuga o anumită logică în evenimentul FormClosing pentru a întreba utilizatorul dacă acesta este ceea ce într-adevăr dorește să facă, apoi puteți anula evenimentul de închidere, iar aplicația dvs. va continua să ruleze dacă totul este bine. Dacă observați această problemă și nu vă duce niciodată logica, va trebui să vă murdăriți mâinile în depanator.

0
adăugat