【问题标题】:Options for Windows service communicationWindows 服务通信的选项
【发布时间】:2011-12-04 10:44:35
【问题描述】:

我正在开发一项服务,它将作为系统运行并在后台处理长时间运行的任务。我现在需要以任务托盘图标的形式向用户显示一些反馈,我还希望能够从任务托盘图标暂停/恢复任务,所以我的要求是向任一方向发送消息并接收任意长度数据块返回响应。单个请求/响应会很好,但它需要双向工作。

这是在 Windows 中使用 C++(非 MFC)。

我在过去使用过 MIDL/RPC,但我需要先定义一个严格的接口规范,并且不能返回任意长度的数据(据我所知)。

对我可以使用的库有什么建议吗?

谢谢, J

【问题讨论】:

  • 通常,您会打开一个管道并通过它进行通信。

标签: c++ windows winapi rpc


【解决方案1】:

COM 是 Windows 中 RPC 的最佳解决方案。它非常强大且易于编写。 Raw MS-RPC 也很好。两者都可以返回任意长度的数据,参见 size_is MIDL 属性:

HRESULT Proc7(
     [out] long  * pSize,
     [out, size_is( , *pSize)] my_type ** ppMyType); /* Specifies a pointer 
                                              to a sized pointer, 
                                              which points to a block 
                                              of my_types, whose size is
                                              unknown when the stub 
                                              calls the server. */

【讨论】:

    【解决方案2】:

    您可以使用以下任何一种:

    • TCP/IP
    • UDP
    • 管道
    • 共享内存(即内存映射文件)

    编辑 - 根据评论:

    一些基于共享内存的解决方案,包括源代码:

    【讨论】:

    • 感谢您的回答,但理想情况下,我正在寻找一个可以处理复杂性而不是自己动手的库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多