There are many ways to communicate between applications each with different tradeoffs.
Probably the most common and preferred method for two applications to communicate with each other in the Windows OS is Interprocess Communications (IPC) as discussed in another thread here. This alone gives you several different options among them being RPC, Pipes, Winsock and I'll lump WCF in here as well.
You could also resort to manipulating files and utilizing a FileSystemWatcher or create a similar solution for Registry watching.
None of these solutions, however, allow you to mutate an applications data or directly invoke methods. Chances are you really don't require this as any communication mechanism allows you to alter a programs state indirectly through a more well defined API. This is the basic idea of abstraction.
You could technically utilize the Process class or possibly an AppDomain and come up with a workaround via Reflection. This isn't exactly what you are looking for either and maintenance can be troublesome. It is good to know about these technologies for other purposes though. Here are a few interesting posts on the subject: Cross AppDomain Call, Example use of AppDomain, Example use of Process, another handy type to look at.
There is yet another way, albeit a bit overboard for your situation, for completeness I will mention it anyways. You could write a Kernel Mode application. This is mostly if you want to interface with new hardware and even in that case some drivers can still be written in user mode. If you are to dive into kernel mode application development you are no longer living in the safety zone of virtual address spaces, if you make a mistake you no longer crash your program, you blue screen the OS. During development it would be wise to use a hard disk cloning utility such as Clonezilla to start from a clean slate if you do hose the OS. You would also need to familiarize yourself with other kernel mode debugging tools again this is a fair bit out of scope.
Summary
I realize none of these methods will technically give you the exact behavior you mention in the question, but I would say the IPC approach is your best bet for handling a pattern where you are creating a Service/Stand alone Application pair.