【问题标题】:How do you communicate between Windows Vista Session 0 and Desktop?您如何在 Windows Vista 会话 0 和桌面之间进行通信?
【发布时间】:2008-09-11 01:29:21
【问题描述】:

在 Vista 之前的早期版本的 Windows 中,您可以让 Windows 服务与当前登录的桌面用户交互,以轻松地在屏幕上显示来自该服务的信息。在 Windows Vista 中,为安全起见,添加了会话 0,以将服务与桌面隔离。在服务和在 Session 0 之外运行的应用程序之间进行通信的简单方法是什么?到目前为止,我已经通过使用 TCP/IP 在两者之间进行通信来解决这个问题,但这似乎是一种草率的方式。

【问题讨论】:

    标签: windows-vista ipc


    【解决方案1】:

    您也可以使用共享内存或命名管道来促进 IPC。从概念上讲,这类似于 TCP/IP,但您不必担心找不到未使用的端口。

    您必须确保您创建的命名对象以“Global\”为前缀,以便所有会话都可以访问它们,如here 所述。

    AFAIK 服务无法再直接与桌面交互。

    【讨论】:

      【解决方案2】:

      确实,出于安全原因,不再可以直接与“桌面”通信。当您生活在具有多个活动用户 + 远程会话的机器中时,究竟什么是“桌面”?

      解决问题的一般方法是使用通过某种 RPC 机制(TCP/IP、IPC、.Net Remoting Channels over 其中之一等)进行通信的服务应用程序。这有点痛苦,但我认为这些好处值得改变。

      【讨论】:

        【解决方案3】:

        对于与桌面对话的服务,您几乎被其中一种 RPC 机制所困。为此目的,.NET 远程处理机制 (IpcServerChannel) 并不难实现。

        同样使用 .NET,桌面应用程序可以使用 ServiceController.ExecuteCommand 直接向服务发送消息。服务通过ServiceBase.OnCustomCommand 接收这些命令。这更容易做到,如果控制服务是您的唯一要求,这就是您所需要的。

        【讨论】:

          猜你喜欢
          • 2010-11-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-17
          • 2011-02-18
          • 2012-02-16
          • 2011-12-09
          • 1970-01-01
          相关资源
          最近更新 更多