Я использую модуль Рассела Либби 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 выполняется, поэтому соединение установлено ...