Wenn das Trayicon unbedingt angezeigt werden muss, würde ich das ganze Programm vielleicht in zwei Programme aufsplitten: Einen Service, der automatisch gestartet wird (und nur einmal läuft) und ein Administrationsprogramm, das für jeden benutzer einzeln ausgeführt wird. Dieses stellt dann das TrayIcon zur Verfügung.
Kommunizieren kannst du mit dem prozess dann via Mailslots, Pipes, MMFs oder
TCP/
IP.