代码之家  ›  专栏  ›  技术社区  ›  Erik Forbes

将CLR主机注入正在运行的进程-可能吗?

  •  3
  • Erik Forbes  · 技术社区  · 17 年前

    我有一个可执行文件(我无法访问的源代码),我想通过它进行扩展。网。这是一个本机可执行文件,因此我需要注入CLR主机才能做到这一点。我的基本想法是通过提供类似脚本的功能。NET语言(例如C#),并在目标可执行文件中提供钩子供脚本操作,反之亦然。

    2 回复  |  直到 17 年前
        1
  •  2
  •   JayMcClellan    17 年前

    如果您的本机可执行文件能够使用COM对象,则可以使用COM互操作来完成此操作。如果你注册你的。NET程序集进行互操作,然后您的本机可执行文件可以使用您的。NET类就像“普通”COM对象一样,当创建第一个对象时,它将在本机进程内启动CLR。类似地,如果你可以从本机可执行文件中公开COM对象,那么你就可以从你的应用程序中使用它们。NET代码,如果您创建了一个互操作程序集(或者如果您只使用IDispatch,甚至没有类型库)。

    基础知识很简单,但我只是触及了表面——对于像这样的严肃项目,你需要一个严肃的参考。我强烈推荐 .NET and COM, The Complete Interoperability Guide 亚当·内森。这是一本大书,没有留下太多未说的话,它也有很多关于设计的好信息。NET和COM类可以干净地互操作。它还解释了如何在本机应用程序中直接托管CLR,但如果不访问源代码,该选项可能不切实际。我肯定会从COM互操作路由开始,如果没有其他选择,我只会在本地托管CLR。

        2
  •  1
  •   aolszowka    15 年前

    EasyHook CodePlex上的项目。它有很多不错的功能,包括一个内置的IPC通信器,用于跨进程通信。它需要一些腿部工作,但应该完全符合你的要求。

    推荐文章