You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在用户关闭Windows会话时执行显微镜控制代码?

解决方案

是可以实现的,Windows系统在注销、关机、重启等会话结束操作执行前,会向所有运行中的应用发送对应通知,你只需捕获对应通知触发你的显微镜关闭逻辑即可。不同开发框架的实现方式如下:

Win32 原生开发场景

  • 处理系统消息WM_QUERYENDSESSION:系统发起会话关闭请求时会优先向所有顶层窗口发送该消息,你可以在该消息的响应函数中直接执行关闭显微镜的代码
  • 注意该阶段的执行逻辑不要超过5秒,超出系统默认等待时间后进程会被强制终止;如果清理逻辑确实需要更长时间,可以调用ShutdownBlockReasonCreate函数向系统申请延长等待时间,同时给用户展示设备清理中的提示

.NET 开发场景(WinForms/WPF)

  • WinForms:重写主窗体的OnFormClosing方法,判断参数e.CloseReason的取值为CloseReason.WindowsShutDown时,执行显微镜清理逻辑
  • WPF:直接订阅Application.SessionEnding系统事件,该事件会在会话结束前触发,在事件回调中执行清理逻辑即可

后台服务开发场景

如果你的程序是无窗口的后台服务,需要向服务控制管理器注册接收SERVICE_CONTROL_SHUTDOWN、SERVICE_CONTROL_SESSIONCHANGE通知,在对应控制指令的回调函数中执行清理逻辑。

避坑提示

  • 不要把清理逻辑放在析构函数、Finalize方法中,进程被系统强制终止时这类方法不会被调用
  • 清理逻辑要做幂等处理,避免重复执行关闭显微镜操作触发异常

内容的提问来源于stack exchange,提问作者Jonathan Le Cornichone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 03:45:04