2008-10-14 43 views
3

我們的WinForms應用程序偶爾會自行關閉。它既沒有顯示我們自己的崩潰錯誤提交對話框,也沒有顯示Windows的錯誤提交對話框,它只是關閉並消失,通常當這個人是afk並且沒有對應用程序做任何事情時。這似乎是一個半罕見的事件,可能每個月有2-3次,而且發生在不止一個人身上。我不知道從哪裏開始獲取repro案例或從哪裏開始追蹤此問題。什麼可能會導致一個.NET WinForms應用程序突然關閉,沒有對話框?

C#.NET 2.0 報告病例數在Win XP

人有什麼想法?

回答

4

由於無限遞歸導致堆棧溢出是應用程序退出時沒有警告的重要原因。除非您已經做了一些有意引起無提示退出的事情,否則未處理的異常(除堆棧溢出外)通常會在應用程序退出前顯示某種UI。堆棧溢出是這個規則最常見的異常(哎呀,對不起)。

當然,從非託管或不安全的代碼中,幾乎肯定可能會以正確的方式破壞運行時,導致無聲退出。

關於檢測和查看Windows事件日誌的建議也很好。

3

異常會導致應用程序「消失」。檢查事件日誌以查看是否有任何內容。

檢查任務管理器,查看窗口消失時進程是否仍然存在。我遇到了資源管理器崩潰,無法重新繪製窗口,直到它被Alt-Tabbed或Switched-To(來自任務管理器)。

不要讓它過去的用戶,方便地忘記他們正在關閉應用程序。您可能希望在應用程序中放置一些日誌邏輯來記錄用戶啓動的關閉。下次它「消失」時,您可以檢查任何日誌條目。

+0

該應用程序還沒有出現在「野外」,所以我知道這些用戶足夠好,相信他們沒有關閉應用程序本身(對於方便健忘,它往往有點太頻繁) – Davy8 2008-10-14 16:10:55

+0

此外,如果已經有另一個進程創建一個新實例,並且他們能夠重新打開該應用程序,所以它確實無聲無息地崩潰了,但總的來說,這些都是值得檢查的好東西。 – Davy8 2008-10-14 16:12:21

0

您可以在FormClosing事件中添加一些邏輯來詢問用戶是否真的想要做什麼,然後可以取消關閉事件,如果一切正常,您的應用程序將繼續運行。如果你一直注意到這個問題,它從來不會執行你的邏輯,你將不得不在調試器中弄髒你的手。

相關問題