C# 反射在新进程中调用方法

本文关键字:调用 方法 进程 反射 新进程 | 更新日期: 2023-09-27 18:34:31

我有一个WPF应用程序,它的行为类似于某种"加载器",使用该加载器,我从SQL服务器获得byte[],并像这样调用该方法:

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

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

C# 反射在新进程中调用方法

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

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

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

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

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

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