在外部执行代码中执行外部代码(带域)

  • 本文关键字:执行 代码 外部 带域 c#
  • 更新时间 :
  • 英文 :


>im 使用以下代码:

public class Launcher : MarshalByRefObject
{
public static void Start(byte[] Exe, string Checksum)
{
string[] args = { IP, id, Checksum };
Console.WriteLine("::Invokeing with: " + IP + ", " + id + ", " + Checksum);
var ps = new PermissionSet(PermissionState.Unrestricted);
var setup = new AppDomainSetup();
setup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;
var ev = new Evidence();
var appDomain = AppDomain.CreateDomain("Sandbox",
ev,
setup,
ps);
var program = (Launcher)appDomain.CreateInstanceAndUnwrap(
typeof(Launcher).Assembly.FullName,
typeof(Launcher).FullName);
program.Execute(Exe, args);
AppDomain.Unload(appDomain);
}
public void Execute(byte[] bytes, object[] args)
{
var assembly = Assembly.Load(bytes);
var main = assembly.EntryPoint;
main.Invoke(null, new object[] { args });
}
}

问题是,我用这个执行的代码也使用此代码,但是我收到此错误:

System.InvalidCastException: Kan transparentproxy niet converteren 纳阿尔型启动器。 bij Embassy.Program.Launcher.Start(Byte[] Exe, 字符串校验和(

谁能帮我, 附言,如果你不知道遮阳篷,就不会投反对票。

第一次超越工作,第二次失败

显然,如果您重写函数并放入如下所示的外部 dll:

public class Launcher : MarshalByRefObject
{
public void Start(byte[] Exe, string[] args)
{
PermissionSet ps = new PermissionSet(PermissionState.Unrestricted);
AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;
Evidence ev = new Evidence();
AppDomain appDomain = AppDomain.CreateDomain("Sandbox",
ev,
setup,
ps);
Launcher program = (Launcher)appDomain.CreateInstanceAndUnwrap(
typeof(Launcher).Assembly.FullName,
typeof(Launcher).FullName);
program.Execute(Exe, new object[] { args });
AppDomain.Unload(appDomain);
}
public void Execute(byte[] bytes, object[] args)
{
Assembly assembly = Assembly.Load(bytes);
MethodInfo main = assembly.EntryPoint;
main.Invoke(null, args);
}
}

并使用新的启动器((调用它。Start('Source', new [] { "args"}(;你会得到想要的结果。

最新更新