我对如何设计我的程序感到好奇。我会尽力说清楚,但很难解释!
基本上,我将一个托管的C#.NET Dll注入某个进程。现在,这个Dll可以通过反射动态加载任何其他Dll(如果另一个Dll实现IRunnable接口)。
我想要的是以下内容:
将Dll注入进程的主GUI。您可以从此GUI加载扩展Dll(通过反射)到进程中(所有这些远程,GUI不得在该进程内)。我希望GUI通过WCF或命名管道进行通信。此外,一旦所述Dll通过反射加载,它必须在主用户界面中创建GUI。
我真的很困惑如何处理这个问题。任何反馈都将不胜感激。
谢谢!
编辑1:
对不起我迟到的回复。我知道如何注入DLL并启动CLR进入远程进程,这不是问题。我会尝试用更好的术语重新表述问题:
基本上,问题是我希望一旦D加载,它就会在A中创建一个GUI窗口。然后我希望GUI窗口能够与D进行通信。这怎么可能?可能我用错误的方式看问题,但我不在乎。
答案 0 :(得分:0)
您是否已经知道如何将DLL注入另一个进程?这不是完全无关紧要的,可能涉及使用钩子或修改进程的内存(当然,两者都需要适当的权限)。
假设你这样做,我会使用.NET Remoting或WCF在这两个进程之间创建一个双向通信通道。如果您有任何更具体的问题,请随时提出。
答案 1 :(得分:0)
您将无法将dll从一个进程注入另一个进程。这种事情是行不通的(即使在本机(非托管)应用程序中)。一个应用程序可以“指示”(或要求)另一个“协作”应用程序来加载特定的dll,前提是该dll在机器上本地可用。所以应用程序“A”可以将dll发送到应用程序“B”并要求“B”加载dll。
应用程序“A”与应用程序“B”通信的方式并不那么重要。如果使用命名管道,则两个应用程序必须位于同一网络上。如果您希望这可以跨网络(Internet)工作,那么可以使用任何tcp技术。 Http可能是更好的选择,所以你可以通过防火墙等。因此,无论您使用ASP.NET还是WCF,Http REST都可以作为一种选择。