Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何捕获在windows server 2003中取消的注销_C#_C++_C_Windows_Delphi - Fatal编程技术网

C# 如何捕获在windows server 2003中取消的注销

C# 如何捕获在windows server 2003中取消的注销,c#,c++,c,windows,delphi,C#,C++,C,Windows,Delphi,我正在开发一个在Windows2003上运行的基于终端服务的系统。它由一个桌面替换应用程序组成,用户从中启动程序。它还有一个注销按钮。当用户注销时,必须发生两件事。首先,他从windows注销。然后,一个存储过程被称为清理用户数据库状态。这几乎可以正常工作,但有一种情况,即用户取消注销事件。典型情况: 1-用户登录,启动MS Word,编辑文档,不保存。 2-然后用户按下注销按钮。 3-MS Word对此作出反应,要求用户保存其更改。 4-用户按下“取消” 此时,桌面应用程序可能已经调用了清理数

我正在开发一个在Windows2003上运行的基于终端服务的系统。它由一个桌面替换应用程序组成,用户从中启动程序。它还有一个注销按钮。当用户注销时,必须发生两件事。首先,他从windows注销。然后,一个存储过程被称为清理用户数据库状态。这几乎可以正常工作,但有一种情况,即用户取消注销事件。典型情况: 1-用户登录,启动MS Word,编辑文档,不保存。 2-然后用户按下注销按钮。 3-MS Word对此作出反应,要求用户保存其更改。 4-用户按下“取消”

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

我的问题有意义吗


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

< P>如果你的用户状态逻辑在shell替换中,那么考虑应用程序重新设计:从会话管理中解脱自定义shell。p> 例如:在服务中移动用户状态逻辑。在此服务中注册RDS通知:WTS\u会话\u登录/WTS\u会话\u注销

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

这样,您就不会处理WM_ENDSESSION/WM_QUERYENDSESSION内容


是否允许您在该机器上运行服务。。。另外,您是否尝试过使用基于grouppolicy的注销脚本启动存储过程?我认为您应该尝试检测实际的注销,并假设已取消:当向Word发送
WM\u QUERYENDSESSION
消息时,会出现“取消”一词;如果注销被取消,系统将永远不会发送
WM\u ENDSESSION
消息。@Medinoc:MSDN文档说明:“当应用程序为WM\u QUERYENDSESSION返回TRUE时,它将接收WM\u ENDSESSION消息并终止,而不管其他应用程序如何响应WM\u QUERYENDSESSION消息。”这意味着我的桌面替换应用程序将接收WM_ENDSESSION,即使它在word中被取消。@DarkSquirrel42:是的,我可以在计算机上实现和运行服务。运行注销脚本可能不是个坏主意。但这并不能解决问题,因为如果用户通过word取消注销过程,我仍然需要启动并运行桌面替换。在这种情况下,我可以选择使用注销脚本启动清理,或者运行一个服务,让您的shell进程暂停,并侦听shell的终止(据我所知,shell是会话结束时将被终止的最后一个进程…),如果用户启动注销,则仍然会留下保留桌面替换的问题。替代品不是一个合适的shell,而是一个图形界面,作为Citrix中的第一个应用程序启动。