I once had a "run only once" problem that I needed to solve on a WinCE machine using Java. My solution was to use TCP/IP. In that case, if an application couldn't bind to a specific local port I made the assumption that an instance of the application was already running. The rational was that even if there was some other reason the new instance couldn't bind to the port, the "run only once" feature was important enough to not let the application run.
I might consider TCP/IP for your problem as well. It seems like a very controlled way to share data. Perhaps more application overhead than you would like to consider but, once solved, your solution will probably never get stripped away again.
Good Luck.