2013-12-18 165 views
1

我剛剛爲我的項目添加了一些(僅限MSIL)dll,並調用其中的方法。現在應用程序隨機崩潰,不會在日誌中留下任何內容(stdout,stderr,應該記錄所有異常的應用程序日誌,以及Windows應用程序日誌)。當然有幾種方法可以達到這個目的,比如Application.Exit等(反編譯)源代碼中的grep,但是一個比這個狹窄問題更普遍的問題是:所有可能的方式退出.net應用程序?

有什麼方法退出使用MSIL一個.NET應用程序,除了:

  • Application.Exit
  • Environment.Exit
  • Environment.FailFast
  • Process.GetCurrentProcess().Kill
  • 通過調用[DllImport]
  • new Thread(_ => { throw new Exception(); }).Start()(感謝user626528)什麼
+1

你在說什麼日誌?您自己的應用程序日誌或Windows應用程序日誌? – Arjang

+1

我編輯它以表明我的意思是我知道的所有日誌*,儘管這是所討論的最終問題的外圍。 –

回答

1

應用程序可能由CLR被終止,如果在後臺線程未處理的異常。您可以使用AppDomain.CurrentDomain.UnhandledException記錄這些事件(儘管如此,您不能用它來阻止它們終止您的應用程序)。您需要將catch塊放到所有後臺線程的頂層函數中,以防止由於未處理的異常而終止應用程序。

+0

好點。我們實際上會聽該事件並記錄異常。 –

+0

有趣的小知識:雖然我們在'AppDomain.UnhandledException'內部的日誌記錄是異步的,我們在其中刷新任何未完成的日誌的'AppDomain.ProcessExit'在UnhandledException之後被調用,所以我們應該沒問題。 –