.net - 将代码注入(inject)正在运行的 WPF 应用程序的最佳方法

标签 .net wpf code-injection

这是我的任务:

  • 将自定义托管代码注入(inject)
    运行托管 WPF 应用程序(即我的代码应该在其他 AppDomain 中运行)
  • 注入(inject)的代码必须在 UI 上执行
    线程

  • 当我说“最好”时,我的意思是:
  • 注入(inject)过程必须尽可能稳定
    尽可能(没有线程死锁,
    等)
  • 代码应该在 x86 和 x64 上运行
    平台没有问题(尤其是
    在 Vista x64 上)

  • 最小用例
  • 选择正在运行的 WPF 程序
  • 注入(inject)自定义代码
  • 注入(inject)代码更改主标题
    目标进程窗口到“代码
    注入(inject)”

  • 我正在评估的解决方案:
    1) 通过 windows 钩子(Hook)注入(inject) (如 Snoop )
    优点:
  • 注入(inject)的代码在 UI 线程上运行

  • 缺点:
  • 需要混合 (c++/cli) 外部 dll
  • 难以调试

  • 2) 通过EasyHook 注入(inject)图书馆
    优点:
  • 库看起来可靠且经过充分测试

  • 缺点:
  • 没有找到在 UI 上运行代码的方法
    线程
  • 注入(inject)库必须签名并且
    安装在广汽

  • 3) 通过 WriteProcessMemory/CreateRemoteThreadEx/LoadLibrary 注入(inject)
    优点:
  • 简单

  • 缺点:
  • 非常不稳定(必须执行代码
    在 DllMain 中,需要 CLR 托管,
    等)

  • 我将使用方法#1。你能推荐一个更好的方法吗?
    是否有任何基于 CLR 托管在非托管 DLL 中的体面技术?
    请注意,我知道这些问题:
  • Code Injection With C#
  • Can I inject a thread in a remote app domain from C#
  • 最佳答案

    在我的旧项目中,我使用的是 CECIL(为单声道完成),它允许我在任何代码中注入(inject)性能跟踪代码。示例太大,无法在此处粘贴,但请查看项目 ReflectionStudio尤其是 this injector class - 。始终可在 mono/cecil web site 上获得- 唯一要做的就是处理您对主 UI 线程的请求。

    关于.net - 将代码注入(inject)正在运行的 WPF 应用程序的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/477441/

    相关文章:

    c# - 将快速文本输入发送到另一个进程(窗口)

    wpf - 数据绑定(bind) TextBlock.Inlines

    php - 如何防止二阶 SQL 攻击?

    dependencies - 注入(inject)你的 IoC 容器?

    mysql - 使用动态加载的表和数据库名称避免查询中的 SQL 注入(inject)

    .net - 我应该在 dotnet 中使用哪种依赖注入(inject)技术?

    .net - 在 Entity Framework 5 中更新实体关联

    c# - Entity Framework 中的导航属性是什么

    c# - WPF:如何将 Listview 列拆分为子列

    c# - 多个 .NET 配置文件和安装项目问题