Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.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服务启动的会话注销_C++_Windows_Service_Logoff - Fatal编程技术网

C++ 如何捕获从windows服务启动的会话注销

C++ 如何捕获从windows服务启动的会话注销,c++,windows,service,logoff,C++,Windows,Service,Logoff,我有一个服务,不断检查一些应用程序,并确保它没有关闭。如果此应用关闭-服务将再次启动它 当用户决定注销会话时,问题开始出现。注销期间,所有应用程序都将关闭,包括矿山应用程序。但该服务仍在运行,并不断尝试再次启动 问题是如何通知服务用户将要注销并且应用程序不再需要重新启动?我已经尝试使用服务控制会话更改通知来实现。但根据MSDN的规定,当所有应用程序都已关闭并完成注销程序后,他们才会开始服务。对我来说太晚了。是否有任何方法可以通过编程发现当前会话正在注销 我的服务在LocalSystem帐户下启动

我有一个服务,不断检查一些应用程序,并确保它没有关闭。如果此应用关闭-服务将再次启动它

当用户决定注销会话时,问题开始出现。注销期间,所有应用程序都将关闭,包括矿山应用程序。但该服务仍在运行,并不断尝试再次启动

问题是如何通知服务用户将要注销并且应用程序不再需要重新启动?我已经尝试使用服务控制会话更改通知来实现。但根据MSDN的规定,当所有应用程序都已关闭并完成注销程序后,他们才会开始服务。对我来说太晚了。是否有任何方法可以通过编程发现当前会话正在注销

我的服务在LocalSystem帐户下启动

谢谢


p、 我没有访问应用程序源代码的权限。需要在不修改的情况下实现目标。

打开应用程序和服务之间的通信通道,安排应用程序告知服务由于注销事件而关闭。

让服务运行两个应用程序:一个是它的看门狗,另一个是你自己实现的。然后,第二个可以通过向服务发送消息(la David Heffernan的回答)来响应注销事件,然后服务将知道不重新启动监视的作业。

您可能无法访问可执行文件的源代码,但这并不意味着您不能影响该过程。例如,你可以。使用
SetWindowsHookEx
,您将捕获发送到应用程序主窗口的
WM_ENDSESSION

为什么不在运行应用程序的用户下创建服务,并告诉它自动启动?在这种情况下,您应该在用户注销时收到SERVICE\u CONTROL\u SHUTDOWN消息,因为服务也将被终止。

为什么不让您的应用程序(至少是应该始终运行的部分)成为一项服务?“我的应用程序”是我需要经常运行的应用程序。但这不是我写的。谢谢你的建议。不幸的是,只有当您是应用程序的作者时,这种方法才有效。在我的情况下,我需要继续运行应用程序,这是第三方。这一定是一个非常特殊的应用程序!这是怎么一回事?你能把它变成一个像srvany这样的服务吗?我没有这个应用的访问权限:)我的客户没有提供,所以我用notepad.exe来测试服务:)除非没有其他方法,我最好只使用服务功能来解决问题。谢谢。我在考虑这个解决方案,但它似乎并不“整洁”。我最好避免让不必要的应用程序不断运行。@vkjr如果您无法控制该应用程序,则可能需要接受一些untidiness@David只有在没有其他方法的情况下。总是有其他方法的。在某种程度上,您试图完成的任务从根本上说是杂乱无章的(我们可以深入了解为什么您需要不断监视并重新启动在用户会话中运行的程序),所以我谦虚地建议您实现一些东西,并继续做更好的事情。如果系统注销,服务不会收到服务控制或关闭。我想如果你设置一个服务在用户登录时启动,在用户注销时停止,你会得到服务控制停止,然后是关闭命令。至少这是我在手动停止服务时所经历的(从未尝试过注销,因为我们的用例不支持注销)。我只经历过服务\u控制\u停止接收,但无论如何对我来说太晚了,应用程序在接收时已经关闭。所以我将继续@JohnZwinck提到的方法。