process.start()嵌入式exe而不先解压缩到文件c#

我的应用资源中嵌入了可执行文件。 ATM我使用程序集reflection将可执行文件解压缩到自己的文件,然后使用START()启动执行程序。 是否可以直接从流中运行嵌入式可执行文件而不是先将其写入文件? 请有人请告诉我最有效的方法。

以下是我从您的问题中收集的内容以及您的意见:

  1. 您想知道是否可以执行嵌入到程序中的可执行文件,而无需先将其提取到磁盘
  2. 您的程序是.NET程序
  3. 您要执行的可执行文件不是.NET程序

答案是: 是的

然而,答案也是非常非常困难的

你需要做的是,并注意我不知道所有关于这个的细节,因为我不这样做,但无论如何:

  1. 将可执行代码加载到内存中
  2. 重新映射二进制映像中的所有地址,以使它们与您加载可执行文件的基址相对应
  3. 可能加载外部引用,即。 可执行文件需要的其他DLL
  4. 重新映射这些引用的地址
  5. 可能加载刚刚加载的引用DLL所需的引用
  6. 重写那些 dll的
  7. 重复3到6直到完成
  8. 调用代码

我假设你的问题是“我可以做1和8”,答案是否定的

如果它是.net可执行文件,您应该能够将其加载到appdomain并以这种方式启动它:
http://msdn.microsoft.com/en-us/library/system.reflection.assembly.load.aspx

实际上很简单:

byte[] bytes = File.ReadAllBytes(path); a = Assembly.Load(bytes); 

现在不是从文件中读取字节,而是从资源中读取它,然后就完成了。 实际上有一篇非常好的文章: 动态加载嵌入式资源程序集

如果您不希望它在硬盘驱动器上,您可以将其保存到ram驱动器,然后从那里运行它。

它可以在没有您的原生EXE必须触摸磁盘的情况下完成。

请参阅此处….它显示了作为资源嵌入的“流程”图像的示例。 它被读入内存,然后CreateProcess和许多其他事情来完成构建一个有效的运行“进程”。