我们得到一个看似随机的AppCrash,其中windows实际接管进程并关闭它,给出一些神秘的调试报告,包括NTDLL.dll,StackHash,User32.dll等.在报告中研究这些模块和信息超过一年之后我们收到的信息就更多了.我们能够做的最好的事情是将其缩小到我们的应用程序用来与通过TCP/IP进行通信的硬件进行交互的DLL.我们无法控制这个外部库,必须使用它,并且鉴于问题是随机的(不能在我们的最终复制,在PC重启时解决),我们似乎一直坚持下去.
问题是我们的应用程序需要在不受人类监控的仪器上全天候运行.我需要检测应用程序何时崩溃,并向整个事件发出重启命令.问题是检测到AppCrash; 应用程序内部不会生成异常(AppCrash在应用程序外部),并且没有任何日志记录会生成程序正在关闭的任何指示.
我们要做的是运行检查应用程序是否运行的服务,如果没有,它会发出重启命令来重启系统.但是,当显示AppCrash对话框时,它将使进程保持运行状态.
有没有办法阻止这些AppCrash通知,绕过它们,或者设置它们至少先关闭程序?请不要指向stackhash.com或使用MS错误报告; 这些设备不具备互联网功能.我们也无法修复我们正在使用的DLL中的任何错误(OEM供应商不合作).
一种方法可能是让应用程序定期告诉另一个服务它还活着并运行良好,而不是试图检测它何时崩溃.使用IPC,您可以每秒向监控服务发送一次心跳消息.