从字节数组启动 C# 控制台应用程序



我想通过从字节数组加载 C# 控制台应用程序来启动它。

如果我将应用程序写入磁盘并手动启动程序,它将启动,这意味着字节已正确读取。

尝试了我在网上找到的各种片段,例如:

Assembly a = Assembly.Load(programma);
MethodInfo method = a.EntryPoint;
if (method != null)
{
    object o = a.CreateInstance(method.Name);
    method.Invoke(o, null);
}

或:

public static Thread RunFromMemory(byte[] bytes)
{
    var thread = new Thread(new ThreadStart(() =>
    {
        var assembly = Assembly.Load(bytes);
        MethodInfo method = assembly.EntryPoint;
        if (method != null)
        {
            method.Invoke(null, null);
        }
    }));
    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
    return thread;
}

这两个代码示例适用于 WinForms 应用程序,但不适用于控制台应用程序。

你获取程序的字节,然后你可以使用 Assembly.Load 从这些字节加载一个Assembly,找到EntryPoint,并调用它。

private static void RunBytes(byte[] bytes)
{    
    Assembly exeAssembly = Assembly.Load(bytes);
    var entryPoint = exeAssembly.EntryPoint;
    var parms = exeAssembly?.CreateInstance(entryPoint.Name);
    entryPoint?.Invoke(parms, null);
}

或者,您可以先将字节写入磁盘,然后尝试改用Assembly.LoadFrom

相关内容

最新更新