2013-12-18 2 views
1

Я только что добавил несколько (MSIL только) DLL к моему проекту и вызвал вызовы методов в нем. Теперь приложение случайно разбивается, не оставляя ничего в журналах (stdout, stderr, журналы приложений, которые должны регистрировать все исключения, и журналы окон) с точки зрения сообщений об ошибках. Есть, конечно, несколько способов добраться до нижней части этого, как для Application.Exit оглавлению и т.д. в (декомпилированных) источников, но один вопрос, который является более общим, чем эта узкая проблема заключается в следующем:Все возможные способы выхода из приложения .net?

Какие способы есть чтобы выйти из приложения .net с помощью MSIL, в дополнение к:

  • 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, поэтому мы должны быть в порядке. –

Смежные вопросы