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

时间:2013-01-07 19:02:23

标签: c# download bytearray webclient exe

  

可能重复:
  Load an EXE file and run it from memory using 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?
}

谢谢。

2 个答案:

答案 0 :(得分:2)

如果您的.exe是.NET程序,则可以load an assembly and run its entry point

否则,在there are ways to do it期间,我无法看到将文件保存在临时目录中并从那里运行它的问题,这样就不那么痛苦了。

答案 1 :(得分:1)

看看这个帖子。我想你可以用VirtualAlloc

来解决它

Is it possible to execute an x86 assembly sequence from within C#?

如果你的字节数组包含.Net程序集,你应该可以这样做:

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