我编写了一个应用程序,它是对现有程序的扩展。但是,所述程序不允许任何加载扩展/插件的方法,或任何你称之为的方法。出于这个原因,我一直在考虑几种可能性,其中包括注入一个C ++ DLL并对它疯狂,但我更感兴趣的是在托管C#中完成整个事情。
目标程序和我自己的程序都是用C#编写的,因此可以管理。现在,我知道如果我在自己的项目中设置对目标程序的引用,我可以在Visual Studio编辑器中“访问”它的属性,字段等,但是我无法获得“真实” “这些价值观,因为我无法在阅读其成员时运行目标程序,这意味着我无法从中获取任何”真实世界“的数据。
我的想法是:如果我要创建一个启动程序,它将DLL(C ++,但它是唯一的C ++部分)注入到设置AppDomain的目标进程中,请将主机进程放在该AppDomain中,然后继续将我的程序加载到同一进程和AppDomain,我能够访问目标程序的“实时”值吗?
我知道这是一个很长的镜头,实际测试这个需要几天甚至几周的编码。这就是我在这里问的原因;也许这有点太不正统和牵强附会,但我认为这实际上有可能奏效。从理论上讲。
所以,简化了一点:将DLL注入目标进程 - >创建AppDomain - >将主机进程放在AppDomain中 - >将MyProgram.exe加载到Process和AppDomain中 - >访问目标流程的方法和属性
答案 0 :(得分:1)
我不确定我是否理解你真正想要做的事情,但是如果你要追求的是在一个应用程序和另一个将在同一台机器上运行的应用程序之间交换数据,那么为什么不使用WCF通信呢? IPC绑定(由NetNamedPipeBinding
类提供)。我相信这比你建议的解决方案更合理,更容易维护和测试。