Использование именованных каналов для связи из службы Windows с интерфейсом GUI в Delphi - PullRequest
1 голос
/ 24 мая 2019

Я использую модуль Рассела Либби Pipes.PAS для облегчения связи между двумя программами с использованием именованных каналов. Я сделал рабочий пример с использованием одного сервера (программа VCL с графическим интерфейсом) и одного клиента (также VCL), который можно запускать несколько раз, и я могу обмениваться данными между ними.

Однако, когда я запускаю тот же код сервера в службе Windows, я вижу, что клиент подключается к службе (я регистрирую в текстовом файле), но когда служба передает сообщение, которое будет прочитано клиентом (-ами) ), на стороне клиента ничего не происходит.

Есть ли какие-то особые вещи, которые необходимо сделать, чтобы именованный канал работал от службы Windows к программе с интерфейсом Frontend?

Я строю серверную трубу следующим образом:

  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 выполняется, поэтому соединение установлено ...

...