如果我将两个应用程序加载到同一个AppDomain中,我可以与另一个托管应用程序交互吗

本文关键字:应用程序 我可以 另一个 交互 AppDomain 如果 加载 两个 同一个 | 更新日期: 2023-09-27 18:19:59

我编写了一个应用程序,它是对现有程序的扩展。然而,上述程序不允许任何加载扩展插件的方法,或者任何你们称之为它们的方法。出于这个原因,我一直在考虑几种可能性,其中包括注入C++DLL并疯狂使用它,但我更感兴趣的是在托管C#中完成整个过程。

目标程序和我自己的程序都是用C#编写的,因此可以进行管理。现在,我知道一个事实,如果我在自己的项目中设置了对目标程序的引用,我可以在Visual Studio编辑器中"访问"它的属性、字段等,但我永远无法从中获得"真实"值,因为在读取其成员时我无法运行目标程序,这意味着我无法从中获取任何"真实"数据。

我的想法是:如果我创建一个启动器,它将一个DLL(C++,但这将是唯一的C++部分)注入到目标进程中,该进程设置了一个AppDomain,将主机进程放置在该AppDomain中,然后继续将我的程序加载到同一进程和AppDomain,我能访问目标程序的"实时"值吗?

我知道这是一个很长的机会,实际上测试这将需要几天甚至几周的编码。这就是为什么我在这里问;也许这有点过于非正统和牵强,但我认为这实际上有可能奏效。理论上。

因此,简化了一点:将DLL注入目标进程->创建AppDomain->将主机进程放置在AppDomain中->将MyProgram.exe加载到进程和AppDomain->访问目标进程的方法和属性

如果我将两个应用程序加载到同一个AppDomain中,我可以与另一个托管应用程序交互吗

我不确定我是否理解您真正想做什么,但如果您要做的是在一个应用程序和另一个将在同一台机器上运行的应用程序之间交换数据,那么为什么不使用IPC绑定(由NetNamedPipeBinding类提供)来使用WCF通信呢。我相信这是一个比您建议的解决方案更合理、更易于维护和测试的解决方案。

相关文章: