【发布时间】:2018-12-27 18:32:38
【问题描述】:
我想通过从字节数组加载来启动一个 C#控制台应用程序。
如果我将应用程序写入磁盘并手动启动程序,它会启动,这意味着字节被正确读取。
我尝试了网上找到的各种sn-ps,例如:
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 应用程序,但不适用于控制台应用程序。
【问题讨论】:
-
行不通是什么意思?你得到一个例外吗?什么都没有发生?
-
如果您希望 Windows 启动一个新进程(打开单独的控制台应用程序需要这样做),这些字节必须存在于磁盘上,而不仅仅是内存中。
-
最后一行的“visual application c#”是什么意思? Winforms?
-
不适用于那些控制台应用程序,因为如果您启动它们,您需要为它们提供可视的标准输入/标准输出以在您的应用程序内运行.启动一个线程不会启动一个新的独立进程。
-
@Broots Waymb 我没有得到任何异常,该进程无限期保持活动状态