我刚刚在我的项目中添加了一些(仅限MSIL)dll,并调用其中的方法。现在应用程序随机崩溃,没有在日志中留下任何错误消息(stdout、stderr、本应记录所有异常的应用程序日志和windows应用程序日志)。当然,有几种方法可以解决这个问题,比如在(反编译的)源中为Application.Exit
等进行grepping,但有一个问题比这个狭隘的问题更普遍:
除了之外,还有什么方法可以使用MSIL退出.net应用程序
Application.Exit
Environment.Exit
Environment.FailFast
Process.GetCurrentProcess().Kill
- 通过
[DllImport]
调用任何内容 new Thread(_ => { throw new Exception(); }).Start()
(感谢用户626528)
如果后台线程中存在未处理的异常,则应用程序可能会被CLR终止。您可以使用AppDomain.CurrentDomain.UnhandledException来记录这些事件(但您不能使用它来阻止它们终止您的应用程序)。您需要将catch块放在所有后台线程的顶部函数中,以防止应用程序因未处理的异常而终止。