我正在使用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?
}
谢谢。
答案 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);