首页 文章

如何捕获在Windows Server 2003中取消的注销

提问于
浏览
3

我正在研究在Windows 2003上运行的基于终端服务的系统 . 它包含一个桌面替换应用程序,用户可以从中启动程序 . 它还有一个注销按钮 . 当用户注销时,必须发生两件事 . 首先,他退出了Windows . 然后调用存储过程来清理用户数据库状态 . 这几乎可以正常工作,但对于一种情况,那就是用户取消注销事件 . 典型场景:1-用户登录,启动MS Word,编辑文档,不保存 . 2 - 然后用户按下注销按钮 . 3- MS Word对此作出反应,要求用户保存他的更改 . 4 - 用户按下取消 .

此时,桌面应用程序可能已经调用了存储过程来清理数据库状态 . 如何在桌面应用程序中捕获此行为?是否有消息说结束会话操作被取消了?

我的问题有意义吗?

哦,所有的应用程序都是用Delphi 7编写的,但我也在C,C和C#中工作,所以这些语言的答案也很受欢迎 .

1 回答

  • 0

    如果您的用户状态逻辑位于shell替换中,那么请考虑应用程序重新设计:从会话管理中解除自定义Shell .

    例如:在服务中移动用户状态逻辑 . 在此服务寄存器中,用于RDS通知:WTS_SESSION_LOGON / WTS_SESSION_LOGOFF .

    我认为只有当如果用户单击Word中取消按钮,那么Windows会知道用户尚未注销实际上和操作系统也不会派WTS_SESSION_LOGOFF(这是未经测试,但听起来合乎逻辑)实际发生注销即WTS_SESSION_LOGOFF发送 .

    这样你就不用处理WM_ENDSESSION / WM_QUERYENDSESSION了 .

    Recently I wrote some guidance on RDS notifications topic.

相关问题