Лучший способ ввести Ваш код в выполнение приложения WPF

Вот моя задача:
  • Введите пользовательский управляемый код в выполнение управляемого приложения WPF (т.е. мой код должен работать в другом AppDomain),
  • Введенный код должен быть выполнен на потоке UI

Когда я говорю 'лучше всего', что подразумеваю что:

  • Инжекционный процесс должен быть максимально стабильным (никакие мертвые блокировки потока, и т.д.)
  • Код должен работать на x86 и x64 платформах без проблемы (особенно на Vista x64)

Минимальный пример использования

  • выберите выполнение программа WPF
  • введите пользовательский код
  • введите заголовок изменений кода главного окна целевого процесса для "Кодирования Введенный"

Решения я оцениваю:

1) Инжекция через рычаги окон (как в Ищейке)

профессионалы:

  • введенный код работает на потоке UI

недостатки:

  • требует смешанный (c ++/cli) внешний dll
  • трудно отлаживать

2) Инжекция через библиотеку EasyHook

профессионалы:

  • библиотека выглядит солидной и хорошо протестированной

недостатки:

  • не нашел способ выполнить код потока UI
  • инжекционная библиотека должна быть подписана и установлена в GAC

3) Инжекционная Виа WriteProcessMemory/CreateRemoteThreadEx/LoadLibrary

профессионалы:

  • простой

недостатки:

  • очень нестабильный (код должен быть выполнен в DllMain, требуемый хостинг CLR, и т.д.),

Я собираюсь использовать метод № 1. Можно ли рекомендовать лучший подход?

Есть ли какие-либо достойные методы на основе хостинга CLR в неуправляемом DLLs?

Обратите внимание на то, что я знаю об этих вопросах:

12
задан Funk 3 April 2018 в 15:38
поделиться