服务中的DDE客户端在用户会话中与服务器通信

时间:2014-12-10 14:32:30

标签: c++ session winapi service dde

我编写了一个与第三方dde服务器通信的C ++ DDE客户端(控制台)应用程序。当我的客户端和服务器在同一会话中时,这很好。 然后我将客户端代码移动到以SYSTEM身份运行的win32服务中。尽管尝试以下操作,客户端代码仍无法获取服务器列表: 1.我尝试在Win7上启用“允许服务与桌面交互”。 2.我在尝试与服务器通信的线程中模拟了用户。 3我试图将客户端代码作为系统执行。

我可以理解主要问题是跨多个会话的通信。但有没有什么方法可以实现优雅?

1 个答案:

答案 0 :(得分:0)

从Vista开始,"互动"由于会话0隔离

,服务不再起作用

DDE是一种基于User32的技术(它在内部使用窗口消息),因此不能跨会话边界使用。

要执行您正在尝试的操作,您必须创建一个单独的非服务应用程序,该应用程序在用户会话的上下文中运行并根据需要使用DDE,通过与会话无关的IPC机制与服务进行来回通信,例如命名管道,套接字或COM对象。该服务可以使用WTSQueryUserToken()CreateProcessAsUser()在需要时在特定用户会话中运行应用。或者,您可以将应用配置为在用户登录时自动运行。