【问题标题】:passing a HANDLE to pipe from windows service to a user application将 HANDLE 传递给从 Windows 服务到用户应用程序的管道
【发布时间】:2012-05-07 06:01:16
【问题描述】:

我正在编写一个将与用户级应用程序通信的 Windows 服务。 Windows 服务将在用户机器上运行 24/7,每当用户启动相应的应用程序时,它将使用命名管道建立与服务的连接。但是这里的服务也负责创建客户端命名管道。在服务器端一切正常,但我不明白如何通过 SCM 将服务创建的句柄发送到客户端进程?

【问题讨论】:

  • 这个问题没有多大意义。我可以收集到的是,您有一个服务(正在运行)和一个用户启动的客户端。当客户端启动时,它会创建一个命名管道来与服务器通信。这一切都说得通。我不明白的是,负责创建的服务是什么客户端命名管道?
  • 是的,你没看错。我希望我的服务为客户端创建一个命名管道,然后与服务建立连接。你能告诉我该怎么做吗?
  • 如果您阅读Named Pipe Client 的教程,它们会展示如何实现客户端和服务器端的命名管道
  • 我想在我的 windows 服务中实现管道的服务器端。您能告诉我如何使用 VS 2k10 在我的服务中调试此功能吗?

标签: c++ windows windows-services


【解决方案1】:

您不应该传递句柄,而是为管道命名并通过调用 CreateFile 来使用它来访问它

【讨论】:

    【解决方案2】:

    您不能通过任何 IPC 机制发送 HANDLE。我能想到的最好的方法是将命名管道的 name 传递(可能在第二个程序的命令行参数中),然后让第二个程序重新打开该管道。这就是这个名字的主要目的。

    【讨论】:

    • 好的,谢谢!我是 C++ 开发的新手,你能告诉我如何在这个客户端和服务进程之间建立一个 Session 吗?
    • 您自己已经回答了这个问题:“每当用户启动相应的应用程序时,它都会使用命名管道建立与服务的连接。”或者它实际上是客户端连接的基本过程到有问题的服务进程创建的命名管道?
    • 还值得指出的是,这个答案在技术上是错误的:link DuplicateHandle 创建了要在 IPC 中使用的句柄。
    • 是的,客户端应用程序的多个实例需要使用命名管道与服务通信。我该怎么做?
    • Chris Becke,先生,您的意思是说我可以通过服务创建客户端管道,然后将此句柄返回给客户端。
    猜你喜欢
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 2016-11-22
    相关资源
    最近更新 更多