Отправка команд из службы Windows в запущенное приложение WinForm

#c# #winforms #service

#c# #winforms #Обслуживание

Вопрос:

У меня есть две отдельные программы. Одним из них является winform, в котором размещен запущенный процесс с перенаправлением вывода через форму. Процесс представляет собой готовый продукт, и вероятность того, что я смогу изменить его самостоятельно, невелика.

Вторая программа — это служба, которая может передавать данные из запущенного процесса, но она не взаимодействует с winform напрямую.

Моя цель — отправить строку из службы в winform, чтобы затем взаимодействовать с запущенным процессом. ИЛИ, я был бы не прочь иметь возможность отправлять команды непосредственно процессу, но я уверен, что это не может произойти без изменения источника запущенного процесса.

Я посмотрел на именованные каналы, но я не уверен, что это лучшее средство. Обе программы размещены на одном компьютере. Я просто не уверен, какие у меня есть варианты. Есть идеи? =)

Ответ №1:

Полный набор опций IPC (межпроцессное взаимодействие), доступных в Windows, описан в MSDN.

  • Буфер обмена
  • КОМ
  • Копирование данных
  • ДДЭ
  • Сопоставление файлов
  • Почтовые слоты
  • Трубы
  • РПК
  • Сокеты Windows

Тогда есть механизмы вне Windows

Из всех перечисленных, именованные каналы, вероятно, лучше всего подходят для вашего конкретного приложения. Я использовал их для подобных целей в прошлом. Они просты в настройке и использовании.

Комментарии:

1. Предположим, тогда я продолжу изучать именованные каналы. Из примеров MSDN, которые я вижу, похоже, что моя служба должна обязательно запускать процесс winform. Это правильно? Это сделало бы мой процесс немного странным, лол

2. @Residualfail: Нет, процессы могут запускаться независимо друг от друга. Ни один из них не должен быть дочерним по отношению к другому.

Ответ №2:

Существует множество вариантов для достижения такого взаимодействия. В основном вы можете использовать именованные каналы (WCF), MSMQ