我编写了一个与第三方dde服务器通信的C ++ DDE客户端(控制台)应用程序。当我的客户端和服务器在同一会话中时,这很好。 然后我将客户端代码移动到以SYSTEM身份运行的win32服务中。尽管尝试以下操作,客户端代码仍无法获取服务器列表: 1.我尝试在Win7上启用“允许服务与桌面交互”。 2.我在尝试与服务器通信的线程中模拟了用户。 3我试图将客户端代码作为系统执行。
我可以理解主要问题是跨多个会话的通信。但有没有什么方法可以实现优雅?
答案 0 :(得分:0)
从Vista开始,"互动"由于会话0隔离。
,服务不再起作用DDE是一种基于User32的技术(它在内部使用窗口消息),因此不能跨会话边界使用。
要执行您正在尝试的操作,您必须创建一个单独的非服务应用程序,该应用程序在用户会话的上下文中运行并根据需要使用DDE,通过与会话无关的IPC机制与服务进行来回通信,例如命名管道,套接字或COM对象。该服务可以使用WTSQueryUserToken()
和CreateProcessAsUser()
在需要时在特定用户会话中运行应用。或者,您可以将应用配置为在用户登录时自动运行。