在 Delphi 中使用命名管道从 Windows 服务到 GUI 前端进行通信

问题描述 投票:0回答:1

我正在使用 Russell Libby 的 Pipes.PAS 单元来促进使用命名管道的两个程序之间的通信。我已经使用一台服务器(带有 GUI 的 VCL 程序)和一个可以多次启动的客户端(也是 VCL)制作了一个工作示例,并且我可以在它们之间来回通信。

但是,当我在 Windows 服务中运行相同的服务器代码时,我可以看到客户端在服务中连接(我登录到文本文件),但是当服务广播要由客户端读取的消息时,客户端没有任何反应。

为了让命名管道从 Windows 服务工作到前端 GUI 程序,是否需要做任何特殊的事情?

我构建服务器管道如下:

  Pipe:=TPipeServer.Create(Self);
  Pipe.Name:='Pipe';
  Pipe.OnPipeMessage:=PipePipeMessage;
  Pipe.OnPipeConnect:=PipePipeConnect;
  Pipe.OnPipeDisconnect:=PipePipeDisconnect;
  Pipe.PipeName := 'Service';
  Pipe.Active:=TRUE;

和客户端:

  Pipe:=TPipeClient.Create(NIL);
  Pipe.Name:='Pipe';
  Pipe.MemoryThrottle:=10240000;
  Pipe.PipeName := 'Service';
  Pipe.OnPipeMessage:=PipePipeMessage;

但我从未执行过 PipePipeMessage 中的代码。

我错过了什么吗?就像我说的,Connected 中的服务器端代码被执行,因此建立了一个连接......

delphi named-pipes delphi-10.3-rio
1个回答
0
投票

GitHub 上现在有更新/分叉版本: https://github.com/superflexible/NamedPipesForDelphi

我自己将其与服务一起使用,效果很好。是的,它需要一个消息传递系统,即 VCL,或非 GUI 替代品。

© www.soinside.com 2019 - 2024. All rights reserved.