如何从内存运行下载的文件



可能重复:
加载EXE文件并使用C#从内存中运行

我正在使用WebClient类从web服务器下载.exe。有没有一种方法可以在不先将.exe保存到磁盘的情况下运行它?

为了完整起见,让我向你展示我迄今为止所拥有的。

这是我用来开始下载的代码:

WebClient webClient = new WebClient();
webClient.DownloadDataCompleted += new DownloadDataCompletedEventHandler(webClient_DownloadDataCompleted);
webClient.DownloadDataAsync(new Uri("http://www.somewebsite.com/calc.exe"));

在(webClient_DownloadDataCompleted(方法中,我只是从参数e:中获取字节

private void webClient_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
{
    Byte[] downloadedData = e.Result;
    // how to run this like a .exe?
}

谢谢。

如果.exe是.NET程序,则可以加载程序集并运行其入口点。

否则,虽然有一些方法可以做到这一点,但我看不出将文件保存在临时目录中并从那里运行的问题,这样就不会那么痛苦了。

看看这个线程。我认为你可以用VirtualAlloc 解决它

是否可以从C#中执行x86程序集序列?

如果你的字节数组包含.Net程序集,你应该能够做到这一点:

Assembly assembly = AppDomain.Load(byteArray)
Type typeToExecute = assembly.GetType("ClassName");
Object instance = Activator.CreateInstance(typeToExecute);

最新更新