Я не знаю ничего, что уже существует, но вы должны быть в состоянии построить что-то с комбинацией:
- Отображенные в память файлы
- События
- Mutex
- Семафор
Это может быть построено таким образом, чтобы не требовался «главный» процесс, поскольку все они могут быть созданы как именованные объекты, которые затем управляются ОС и не уничтожаются до тех пор, пока их не использует последний клиент. Основная идея заключается в том, что первый запускаемый процесс создает нужные вам объекты, а затем все остальные процессы подключаются к ним. Если первый процесс завершает работу, объекты остаются до тех пор, пока хотя бы один процесс поддерживает их.
Файл, отображаемый в память, используется для разделения памяти между процессами. Мьютекс обеспечивает синхронизацию для предотвращения одновременных обновлений. Если вы хотите разрешить несколько читателей или одного писателя, вы можете создать что-то вроде блокировки чтения / записи, используя пару мьютексов и семафор (см. Существует ли глобальная именованная блокировка чтения / записи? ). А события используются для уведомления всех о новых сообщениях.
Я махнул рукой на некоторые важные технические детали. Например, знать, когда нужно сбросить событие, довольно сложно. Вместо этого вы можете проводить опрос каждого приложения на предмет обновлений.
Но, следуя этому маршруту, вы сможете обмениваться информацией без установления соединения. Не требуется, чтобы всегда выполнялся «серверный» процесс.
Для реализации я бы предложил реализовать его на C ++ и позволить программам на C # вызывать его через P / Invoke. Или, возможно, в C #, и пусть приложения C ++ вызывают его через COM-взаимодействие. Это предполагает, конечно, что ваши приложения C ++ являются нативными, а не C ++ / CLI.