1) You can make an "interactive service", which can interact with the desktop, so you can use most of the normal interface techniques (windows messages and so on).
On the other side, interactive services can posse some security problems and, very important, making VCL objects(particulary forms) work in services is a royal pain.
If you have little experience in services, better stay out.
2) You can make a normal service and interface it with a normal application in some ways:
2.1) Using pipes. The Windows preferred method. I don't like pipes too much, I think the model id missguided.
2.2) Using virtual files. A quick (and may be dirty) method if you have not much different info to transmit (say you are only transmitting "x of total" info like in a process meter).
2.3) Using sockets. Kinda inefficient resource wise but my preferred method when I have complex protocols to comunicate.
2.4) Other crazy methods like registry keys. Not recomended in general (can be of use in very specific cases).
Feel free to ask about any concrete doubt you can have. Regrettabily, the issue is so broad to give you an overview.
Tell me some more about what the service make and what things are you interfacing and I'll give you some more precise opinions.
buho (A).