首先,让我说我已经浏览了this,我仍然无法找到解决问题的绝佳方法。 (我将在帖子中详细说明)
现在到了这一点。 我有一个程序,我想通过登录安全。 我的设置如下:
LOGIN.EXE
Application.exe (从服务器收集到byte [])
用户应该登录,并且在成功登录后,获取服务器文件(Application.exe)并运行它,但是此文件必须不本地存储在用户计算机上。相反,此文件存储为字节数组,应作为程序启动,但如果可能,则不应在硬盘驱动器上启用。
以下是用户如何看到它:
现在我遇到的主要问题是,每当我加载这个字节数组时,我都会遇到以下异常:
System.Reflection.TargetInvocationException: The destination of an activation triggered an exception. ---> System.InvalidOperationException: Can not create more than one instance of System.Windows.Application in the same AppDomain.
我尝试过多种方式,但我总是最终得到以下代码:
Assembly a = Assembly.Load(tmpbytearray);
MethodInfo method = a.EntryPoint;
if (method != null)
{
object o = a.CreateInstance(method.Name);
method.Invoke(o, null);
}
我也试过
Assembly assembly = Assembly.Load(tmpsrc);
//entrypoint: MyMainApplication.App.Main
Type type = assembly.GetType("MyMainApplication.App");
var obj = Activator.CreateInstance(type);
type.InvokeMember("Main",
BindingFlags.Default | BindingFlags.InvokeMethod,
null,
obj,
null);
但仍然坚持相同的例外。
当我从顶部阅读reference(B部分和C部分)时,我也看到了CreateInstanceFromAndUnwrap的用法,但我找不到办法为它提供一个字节数组,而不是文件路径,我决定不这样做。 现在我回到原点,因此我最后希望总结这个项目的解决方案。
如果我在整个帖子中犯了一些误解,请随意提问,因为我会尽力使其尽可能清晰易懂。
提前致谢!
更新(可能另一种方法) 我现在想到制作一个基于控制台的小型应用程序,它将作为一个发射器"对于这个应用程序然而,这也是一个例外:
System.Reflection.TargetInvocationException: The destination of an activation triggered an exception. ---> System.IO.IOException: The resource mainwindow.xaml was not found.
这个异常非常奇怪,因为应用程序本身在运行时可以正常工作。以下是:
Assembly a = Assembly.Load(tmpsrc);
MethodInfo method = a.EntryPoint;
if (method != null)
{
object o = a.CreateInstance(method.Name);
method.Invoke(o, null); //Exception.
}
根据可能最简单的解决方案,您更喜欢什么,以及您如何看待任何方法的可能解决方案(第二种方法或第一种方法)?
答案 0 :(得分:0)
(我不能将此标记为完整,但此问题现已解决)
所以,有些人在以后挣扎,我终于成功了。
我最终尝试了很多东西,但我的解决方案基于this问题。
我在登录应用程序中使用了loader类,并在成功授权登录后添加了其余类:
var domain = AppDomain.CreateDomain("test");
domain.Load("Login");
var loader = (Loader)domain.CreateInstanceAndUnwrap("Login", "Login.Loader");
loader.Load(tmpsrc);
之后它以某种方式起作用,我感到非常惊讶。但无论如何,感谢帮助和精确指向正确的科目!