следующий проект:
AssemblyA.dll (содержит основные элементы)
AssemblyB.dll (стала внедрённой)
app.exe (графический интерфейс для запуска инъекции)
Я запускаю свое приложение для поиска конкретного работающего процесса (для тестирования простого wpf-приложения). После запуска этих приложений я бы начал свою инъекцию DLL. Для этого я зацикливаюсь на каждом процессе. Найдя искомый, я начинаю вводить свою сборку. До этого момента все в порядке.
Когда он вводится, я отправляю сообщение через
::SendMessage((HWND)handle.ToPointer(), MESSAGE, (WPARAM)assemblyPath, 0);
Параметр path содержит информацию о моем AssemblyB (имя сборки, имя типа, имя метода), параметр сообщения содержит только «invoke», чтобы проверить, какая программа действий должна делать.
Наконец, я бы начал конкретный метод через
methodInfo->Invoke(nullptr, nullptr);
Но этот вызов не работает, потому что моя целевая сборка ссылается на assemblyA.dll, и я получаю следующее исключение:
EEFileLoadException * __ptr64 at position 0x00309940..
[...] [rethrow] at position 0x00000000..
Обнаружен помощник для неуправляемой отладки «BindingFailure» в «path \ WpfApplication1.exe».
Сборка с именем: «AssemblyA» не может быть загружена в «Anonymous» -связывающий контекст
Домен приложения с идентификатором 1. ошибка:
System.IO.FileNotFoundException: файл или сборка «AssemblyA,
Версия = 1.0.0.0, Культура = нейтральная, PublicKeyToken = null «или зависимость не найдена.
Поэтому я думаю, что WpfApplication нужна ссылка на мой AssemblyA, потому что, если я помещаю копию в путь выполнения Applications, он работает нормально.
Есть ли возможность «сохранить» сборку A в сборке B при ее сборке? Или это другая ошибка? что я должен изменить?
Задача ещё не решена.
Других решений пока нет …