我正在尝试开发一个在后台运行的C ++ MFC应用程序(在Windows中),我有一个问题,我无法找到完整的响应。
我如何检测用户何时尝试通过任务管理器通过终止进程关闭它,何时通过关闭计算机以及此应用程序运行的计算机崩溃来关闭它?
知道我有一个与此应用程序交互的外部数据库(SQL Server 2008)。
答案 0 :(得分:0)
您可以按照上面的建议处理WM_QUIT。 还有WM_QUERYENDSESSION及其家族。
对于没有GUI的服务,请使用RegisterServiceCtrlHandlerEx获取通知。
另一方面,要在您自己的应用程序崩溃时进行拦截,您会混淆结构化异常处理程序,尽管在发生这种情况时您可能没有可靠的数据。
最后,当计算机本身崩溃时,你无能为力,行为很简单。
无论如何,你不能确保有一个健康的数据库会话,有无限的理由你可能会丢失数据库会话,即使空闲时间太长。
您应该将系统设计为对极端极端情况具有一定的容错能力,例如使用事务,回滚机制,当它到达风扇时的可追踪记录等。