Используя Indy, вы можете относительно легко создать TCP-соединение между вашими приложениями. Особенно, если вам нужно только отправить строковые сообщения. Для клиента (в вашем случае настольное приложение) это в основном
var
Client : TIdTCPClient;
...
Client.Host := 'localhost';
Client.Port := AnyFreePortNumber;
Client.Connect;
Client.IOHandler.Writeln (SomeString);
Response := Client.Readln;
...
Client.Disconnect;
Для сервера (будет услуга в вашем случае)
var
Server : TIdTCPServer;
Binding : TIdSocketHandle;
...
Server.DefaultPort := SameFreePortNumberAsInClient;
Binding := Server.Bindings.Add;
Binding.IP := '127.0.0.1';
Binding.Port := Server.DefaultPort;
Server.OnConnect := HandleConnection;
Server.OnDisconnect := HandleDisconnection;
Server.OnExecute := HandleCommunication;
Server.Active := True;
Просто внедрите метод HandleCommunication. Он вызывается всякий раз, когда клиент решает что-то отправить. Пример:
procedure MyClass.HandleCommunication (AContext : TIdContext);
var
Request : String;
begin
Request := AContext.Connection.IOHandler.Readln;
if (Request = Command1) then
HandleCommand1
else if (Request = Command2) then
HandleCommand2
...
end;
IIRC службе разрешено иметь только графический интерфейс пользователя ИЛИ иметь доступ к сети, поэтому это может быть проблемой, если вашей службе требуется графический интерфейс (которого в любом случае следует избегать, см. Этот вопрос ). Я не знаю, как это делается в Windwos Vista и позже.