Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
退出.net应用程序的所有可能方法?_.net_Exit_Cil - Fatal编程技术网

退出.net应用程序的所有可能方法?

退出.net应用程序的所有可能方法?,.net,exit,cil,.net,Exit,Cil,我只是在我的项目中添加了一些(仅限MSIL)DLL,并调用其中的方法。现在,应用程序随机崩溃,不会在日志(stdout、stderr、应该记录所有异常的应用程序日志以及windows应用程序日志)中留下任何错误消息。当然,有几种方法可以解决这个问题,比如在(反编译的)源代码中对应用程序.Exit进行grepping等,但有一个问题比这个狭隘的问题更为普遍: 除了: 应用程序。退出 环境。退出 Environment.FailFast Process.GetCurrentProcess().Ki

我只是在我的项目中添加了一些(仅限MSIL)DLL,并调用其中的方法。现在,应用程序随机崩溃,不会在日志(stdout、stderr、应该记录所有异常的应用程序日志以及windows应用程序日志)中留下任何错误消息。当然,有几种方法可以解决这个问题,比如在(反编译的)源代码中对
应用程序.Exit
进行grepping等,但有一个问题比这个狭隘的问题更为普遍:

除了:

  • 应用程序。退出
  • 环境。退出
  • Environment.FailFast
  • Process.GetCurrentProcess().Kill
  • 通过
    [DllImport]
  • 新线程({throw new Exception();}).Start()
    (感谢用户626528)

如果后台线程中存在未处理的异常,您的应用程序可能会被CLR终止。您可以使用AppDomain.CurrentDomain.UnhandledException记录这些事件(但不能使用它阻止它们终止应用程序)。您需要将catch块放在所有后台线程的顶部函数中,以防止由于未处理的异常而导致应用程序终止。

您在谈论哪些日志?您自己的应用程序日志还是Windows应用程序日志?我对其进行了编辑,以表明我指的是我所知道的所有日志,尽管这与所讨论的最终问题无关。这一点很好。我们实际上会侦听该事件并记录异常。有趣的小贴士:尽管我们在
AppDomain.UnhandledException
中的日志记录是异步的,但在UnhandledException之后会调用刷新任何未处理日志的
AppDomain.ProcessExit
,所以我们应该没事。