C#Reflection在新进程中调用方法

时间:2016-02-12 12:53:13

标签: c#

我有一个WPF应用程序,就像某种“加载器”一样,使用该加载器我从我的SQL服务器获得byte[]并且我调用这样的方法:

Assembly assembly = Assembly.Load(bin);
MethodInfo method = assembly.EntryPoint;
method.Invoke(null, null);

然而,这将在加载器进程内启动新进程,但是当加载应用程序时,我想关闭加载器。我可以以某种方式调用我的方法作为新程序/在另一个进程内吗?

3 个答案:

答案 0 :(得分:1)

您正在寻找处理AppDomain.AssemblyResolve事件。然后,您可以将主要可执行文件的引用嵌入为资源,即;您的应用所依赖的*.dll's可以是嵌入式资源。然后,当您处理此事件时,您可以获取资源并加载程序集从所述事件处理程序返回它。

这对于防止用户使用外部.exe / .dll非常有帮助。

答案 1 :(得分:0)

如果您能够使用Process.Start方法运行应用程序的名称/路径。详情请见https://msdn.microsoft.com/en-us/library/system.diagnostics.process.start(v=vs.110).aspx

答案 2 :(得分:0)

如果没有合作的过程,你无法以这种方式进入另一个过程。可能需要创建一个加载DLL并运行它的托管exe

您甚至可以在现有应用程序中执行此操作。创建一个命令行参数,使您的应用程序加载DLL并运行它而不是显示WPF UI。然后,重启"你自己"。

或者,只需关闭WPF窗口并退出UI线程即可。这应该可以清理大部分资源。