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

时间:2013-04-25 08:45:54

标签: c# c++ c windows delphi

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

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

我的问题是否有意义?

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

1 个答案:

答案 0 :(得分:0)

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

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

我认为WTS_SESSION_LOGOFF仅在发生实际注销时发送 ,即如果用户单击Word中的“取消”按钮,则Windows会知道用户实际上没有注销,操作系统也不会发送WTS_SESSION_LOGOFF(这未经测试,但听起来合乎逻辑。)

这样你就不会处理WM_ENDSESSION / WM_QUERYENDSESSION的东西了。

Recently I wrote some guidance on RDS notifications topic.