#c# #winforms #service
#c# #winforms #Обслуживание
Вопрос:
У меня есть две отдельные программы. Одним из них является winform, в котором размещен запущенный процесс с перенаправлением вывода через форму. Процесс представляет собой готовый продукт, и вероятность того, что я смогу изменить его самостоятельно, невелика.
Вторая программа — это служба, которая может передавать данные из запущенного процесса, но она не взаимодействует с winform напрямую.
Моя цель — отправить строку из службы в winform, чтобы затем взаимодействовать с запущенным процессом. ИЛИ, я был бы не прочь иметь возможность отправлять команды непосредственно процессу, но я уверен, что это не может произойти без изменения источника запущенного процесса.
Я посмотрел на именованные каналы, но я не уверен, что это лучшее средство. Обе программы размещены на одном компьютере. Я просто не уверен, какие у меня есть варианты. Есть идеи? =)
Ответ №1:
Полный набор опций IPC (межпроцессное взаимодействие), доступных в Windows, описан в MSDN.
- Буфер обмена
- КОМ
- Копирование данных
- ДДЭ
- Сопоставление файлов
- Почтовые слоты
- Трубы
- РПК
- Сокеты Windows
Тогда есть механизмы вне Windows
- MSMQ или аналогичные системы очередей
- Запись команд / состояния в базу данных или файл
Из всех перечисленных, именованные каналы, вероятно, лучше всего подходят для вашего конкретного приложения. Я использовал их для подобных целей в прошлом. Они просты в настройке и использовании.
Комментарии:
1. Предположим, тогда я продолжу изучать именованные каналы. Из примеров MSDN, которые я вижу, похоже, что моя служба должна обязательно запускать процесс winform. Это правильно? Это сделало бы мой процесс немного странным, лол
2. @Residualfail: Нет, процессы могут запускаться независимо друг от друга. Ни один из них не должен быть дочерним по отношению к другому.
Ответ №2:
Существует множество вариантов для достижения такого взаимодействия. В основном вы можете использовать именованные каналы (WCF), MSMQ