这是我的任务:
- 将自定义托管代码注入正在运行的托管 WPF 应用程序(即我的代码应该在其他 AppDomain 中运行)
- 注入的代码必须在 UI 线程上执行
当我说“最好”时,我的意思是:
- 注入过程必须尽可能稳定(无线程死锁等)
- 代码应该可以毫无问题地在 x86 和 x64 平台上运行(尤其是在 Vista x64 上)
最小用例
- 选择正在运行的 WPF 程序
- 注入自定义代码
- 注入代码将目标进程主窗口的标题更改为“注入代码”
我正在评估的解决方案:
1) 通过 windows hooks 注入(如在Snoop中)
优点:
- 注入的代码在 UI 线程上运行
缺点:
- 需要混合 (c++/cli) 外部 dll
- 难以调试
2) 通过EasyHook库注入
优点:
- 库看起来很稳固且经过良好测试
缺点:
- 没有找到在 UI 线程上运行代码的方法
- 注入库必须在 GAC 中签名并安装
3) 通过 WriteProcessMemory/CreateRemoteThreadEx/LoadLibrary 注入
优点:
- 简单的
缺点:
- 非常不稳定(代码必须在 DllMain 中执行,需要 CLR 托管等)
我将使用方法#1。你能推荐一个更好的方法吗?
是否有任何基于 CLR 托管在非托管 DLL 中的体面技术?
请注意,我知道这些问题: