如何捕获绝对所有异常/错误

chr*_*ero 6 .net c# error-handling windows-services

我有一个在WinXPe下运行的Windows服务应用程序,它有时会失败并显示错误并向用户显示一个消息框:

""处的指令引用"0x00000000"处的内存.内存无法"读取".按"确定"退出程序

如果用户单击"确定",则服务正在重新启动.

我试图通过AppDomain.CurrentDomain.UnhandledException 在处理程序中注册eventhandler来捕获所有未处理的异常,我记录异常详细信息并退出应用程序.但我上面提到的错误不是从"UnhandledException"处理的.

该应用程序是多线程的,使用System.Threading.Timer和System.Threading.Thread.它使用了一些第三方库,其中一个库使用本机互操作,我没有本机库的来源.

我试图用附加的调试器指出错误,但错误没有显示;)应用程序必须在错误发生前几天运行.

我需要一种方法来处理这样的错误.

谢谢

seh*_*ehe 3

请参阅向量异常处理

这是 Windows SEH结构化异常处理)的一部分,IIRC 这里有一些宝贵的错误,在这种情况下您至少不会被通知。

可能希望将任何处理代码直接写入本机 WIN32 API(以不安全/非托管代码形式)并仅使用预分配(静态?)缓冲区,因为此时会有很多事情不可靠。

注意/远离线程、锁定原语、内存分配、磁盘 IO;最好使用 Windows 默认 API,例如重新启动进程或生成小型转储以及类似的内容