6

可能重复:
加载一个 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?
}

谢谢你。

4

2 回答 2

2

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

否则,虽然有办法做到这一点,但我看不出将文件保存在临时目录中并从那里运行它的问题,这样痛苦少得多。

于 2013-01-07T19:06:34.173 回答
1

看看这个线程。我想你可以解决它VirtualAlloc

是否可以从 C# 中执行 x86 汇编序列?

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

Assembly assembly = AppDomain.Load(byteArray)
Type typeToExecute = assembly.GetType("ClassName");
Object instance = Activator.CreateInstance(typeToExecute);
于 2013-01-07T19:07:34.060 回答