Могу ли я взаимодействовать с другим управляемым приложением, если загружаю оба приложения в один и тот же домен приложений? - PullRequest
0 голосов
/ 12 января 2012

Я кодировал приложение, которое должно быть расширением уже существующей программы.Тем не менее, указанная программа не допускает какие-либо методы для загрузки расширений / плагинов, или как вы их называете.По этой причине я размышлял над несколькими возможностями, среди которых внедрение C ++ DLL и сумасшествие с ним, но меня больше интересует выполнение всего этого в управляемом C #.

И целевая программа, и моя собственная программа написаны на C # и, следовательно, управляются.Теперь я точно знаю, что если я установлю ссылку на целевую программу в своем собственном проекте, я смогу «получить доступ» к ее свойствам, полям и т. Д. В редакторе Visual Studio, но я никак не смогу получить «реальную»"значения из тех, поскольку я не могу запустить целевую программу во время чтения ее членов, а это значит, что я не могу получить из нее никаких данных" реального мира ".

Моя идея заключается в следующем: если бы я должен был создать модуль запуска, который вставляет DLL (C ++, но это будет единственная часть C ++) в целевой процесс, который устанавливает AppDomain, помещает хост-процесс в этот AppDomain, а затем продолжает загружать мойзапрограммировать в тот же процесс и AppDomain, смогу ли я получить доступ к значениям целевой программы в режиме реального времени?

Я знаю, что это длинный путь, и на самом деле тестирование заняло бы дни, если не неделикодирования.Вот почему я спрашиваю здесь;и, возможно, это слишком необычно и надумано, но я думаю, что на самом деле есть шанс, что это сработает.Теоретически.

Итак, немного упростил: Внедрить DLL в целевой процесс -> Создать AppDomain -> Поместить хост-процесс в AppDomain -> Загрузить MyProgram.exe в Process и AppDomain -> Доступ к целевому процессу 'методы и свойства

1 Ответ

1 голос
/ 12 января 2012

Я не уверен, что понял, что вы действительно хотите сделать, но если вы хотите обменяться данными между приложением и другим, которое будет работать на той же машине, то почему бы не использовать связь WCF с привязка IPC (предлагается классом NetNamedPipeBinding). Я считаю, что это гораздо более разумно и проще в обслуживании и тестировании, чем предложенное вами решение.

...