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

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

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

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

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

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

1 ответ

Решение

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

Другие вопросы по тегам