如何从内存运行下载的文件
本文关键字:下载 文件 运行 内存 | 更新日期: 2023-09-27 17:50:58
可能重复:
加载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);