Вопрос дизайна для удаленного процесса - PullRequest
1 голос
/ 28 февраля 2011

Я запутался в том, как мне разработать свою программу.Я постараюсь быть ясным, но это трудно объяснить!

По сути, я внедряю управляемый C # .NET Dll в определенный процесс.Прямо сейчас, этот Dll может загружать любой другой Dll динамически с помощью отражения (если другой Dll реализует интерфейс IRunnable).

Я хотел бы иметь следующее:

Главный графический интерфейс, которыйвводит Dll в процесс.Вы можете загрузить из этого GUI расширение Dll (через отражение) в процесс (все это удаленно, GUI НЕ ДОЛЖЕН быть в этом процессе).Я хочу, чтобы графический интерфейс взаимодействовал через WCF или именованный канал.Кроме того, после того, как упомянутая Dll была загружена через отражение, она должна создать графический интерфейс в главном пользовательском интерфейсе.

Я действительно не понимаю, как решить эту проблему.Любые отзывы будут оценены.

Спасибо!

РЕДАКТИРОВАТЬ 1:

Извините за поздний ответ я был вне города.Я знаю, как внедрить DLL и запустить CLR в удаленном процессе, это не проблема.Я попытаюсь переформулировать проблему в лучшую сторону:

  • A: Хост-процесс (инжектор)
  • B: Целевой процесс (тот, кто будет введен)
  • C: Dll для инъекции
  • D: Dll, загруженная с помощью отражения от C. Принадлежит к процессу B.

В принципе, проблема в том, что я хотел бы, чтобы после загрузки D, это создает окно GUI в A. Тогда я хотел бы, чтобы это окно GUI могло общаться с D. Как это возможно?Возможно, я смотрю на проблему неправильно, но я не в курсе.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2011

Вы не сможете внедрить dll из одного процесса в другой.Подобные вещи просто не будут работать (даже в нативных (неуправляемых) приложениях).Одно приложение может «проинструктировать» (или попросить) другое «взаимодействующее» приложение для загрузки определенной библиотеки DLL при условии, что библиотека DLL доступна локально на компьютере.Таким образом, приложение «A» может отправить dll в приложение «B» и попросить «B» также загрузить dll.

Способ, которым приложение «A» связывается с приложением «B», не так важен.Если вы используете именованные каналы, оба приложения должны быть в одной сети.Если вы хотите, чтобы это работало в сети (интернет), тогда можно использовать любую технологию TCP.HTTP может быть лучшим выбором, так что вы можете пройти через брандмауэры и тому подобное.Так что Http REST может быть одним из вариантов, независимо от того, используете ли вы ASP.NET или WCF.

0 голосов
/ 28 февраля 2011

Вы уже знаете, как внедрить DLL в другой процесс?Это не совсем тривиально, и может включать в себя использование перехватчиков или изменение памяти процесса (конечно, оба требуют соответствующих прав).

Если вы это сделаете, я бы использовал .NET Remoting или WCF для созданиядвусторонний канал связи между двумя процессами.Если у вас есть более конкретные вопросы, не стесняйтесь спрашивать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...