2012-06-22 3 views
0

Доброе утро.
Это странный вопрос, я знаю, но будьте терпеливы со мной, пожалуйста! :-)Поддельный выход на консольное приложение без его закрытия

Сценарий
Несколько лет назад я сделал простой C# консольное приложение (назовем его MyApp, myapp.exe), что делает некоторую работу для большого приложения COBOL (назовем его CblApp).
Это приложение обычно читает некоторые файлы, запрашивает работу (например, вызывает веб-службы и т. Д.) И записывает некоторые выходные файлы.
Взаимодействия с CblApp работает таким образом:

  • CblApp называет myapp.exe, например MYAPP.EXE -i: readinputfilefile.xml -w: writeresults.xml
  • CblApp самих блоков до тех пор, пока myapp.exe замкнутый (синхронный способ)
  • Когда myapp.exe закончена и закрывает сам, CblApp прочитать файлы результатов

является плагин на основе MyApp, а теперь это чудовище с 40 плагинов, регистрация, инетернет проверка соединения и т.д. ..; загрузка его каждый раз с нуля занимает некоторое время, поэтому я создал новую версию, которая работает как одно приложение istance с иконкой в ​​трее.
Приятный, но CblApp не может его использовать: CblApp не может изменить свой способ взаимодействия с myapp.exe.
Вопрос
Теперь вопрос: могу ли я смоделировать CblApp, что myapp.exe закрыт, не сделав этого действительно?
Теперь я написал поддельный myapp.exe, который вызывает одно приложение istance, ждет, пока работа не будет выполнена, чем закрывается, но мне это не нравится.
Надеюсь, что кто-то распустит этот запутанный вопрос. :-)
Спасибо!
Nando

+1

Сделайте myapp.exe удаленным клиентом. Сделайте другое приложение удаленным сервером. – leppie

+0

По мере того, как я читал свои идеи, мы сходились по идее: напишите фальшивый myapp.exe, который вызывает одно приложение istance, ждет, пока работа не будет выполнена, чем закрывается. Но вы говорите, что вам не нравится эта идея, почему? –

+0

Как _clbApp_ связывается с _mayapp.exe_? Какое условие он ищет, чтобы определить, закончилось ли это? – Attila

ответ

2

Вы можете рассмотреть Службу Windows вместо приложения консоли.

Услуга может быть запущена один раз и всегда работать в фоновом режиме, поэтому вам не нужно будет инициализировать все для каждого вызова. Для связи с сервисом Windows вы можете использовать файлы или сокеты или базу данных, независимо от ваших потребностей.

+0

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

+0

@ thecoon: WCF является излишним для IPC. Просто используйте удаленное соединение по именованным каналам. Простота установки и быстрого освещения. – leppie

+0

@leppie: Remoting устарел. См. Http://msdn.microsoft.com/en-us/library/kwdt6w2k(v=vs.100).aspx –