process.start()嵌入式exe而不先提取到文件c#

时间:2011-05-13 20:46:38

标签: c# .net process

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

5 个答案:

答案 0 :(得分:8)

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

  1. 您想知道是否可以执行嵌入到程序中的可执行文件,而不是先将其解压缩到磁盘
  2. 您的程序是.NET程序
  3. 您要执行的可执行文件不是.NET程序
  4. 答案是:

    然而,对此的答案也是非常,非常,很难

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

    1. 将可执行代码加载到内存
    2. 重新映射二进制映像中的所有地址,使其与您在
    3. 中加载可执行文件的基址相对应
    4. 可能加载外部引用,即。可执行文件需要的其他DLL
    5. 重新映射这些引用
    6. 的地址
    7. 可能加载刚刚加载的引用DLL
    8. 所需的引用
    9. 重新那些 dll的
    10. 重复3到6直到完成
    11. 致电代码
    12. 我假设你的问题是“我可以做1和8”,答案是

答案 1 :(得分:4)

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

答案 2 :(得分:3)

实际上非常简单:

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

现在不是从文件中读取字节,而是从资源中读取它,然后就完成了。实际上有一篇非常好的文章:Dynamically Loading Embedded Resource Assemblies

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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

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