我将一个文件的全部字节保存在一个字节数组中,byte[]buffer
在不将该文件复制到磁盘的前提下(这是重要前提!!!),怎么运行该文件?
如果有必要,可以分3种情况(有通用的方法更好):
1.托管exe文件
2.非托管exe文件
3.其他文件(如txt,mp3,avi,chm等文件)
对于托管exe文件,我曾试图用
Assembly.Load(byte[])加载程序集,然后反射调用Main方法来执行,结果失败了如果有通用的、简单的方法就好了

解决方案 »

  1.   

    目前好像没有什么办法,一个Exe中不能再运行一个Exe了。可能VC中会有些办法
      

  2.   

    常用的方法你都说了啦1.托管exe文件 
    2.非托管exe文件 
    3.其他文件(如txt,mp3,avi,chm等文件) 
      

  3.   

    目前好像没有什么办法,一个Exe中不能再运行一个Exe了。可能VC中会有
    正好搞反。。VC中是没什么办法的。
    .NET中是可以的。但必须是托管exe文件才行。也就是楼主所说的1.是你用的方法不对。你用AppDomain创建一个新域 ,然后执行给定的带入口点的程序集就可以了。
      

  4.   

    托管EXE和托管DLL启动CLR
    当编译器/连接器创建一个可执行程序集时,下面6字节x86 stub函数被嵌入到PE文件的.text部分:JMP _CorExeMain
    因为_CorExeMain 函数是从微软的MSCorEE.dll(表示微软组件对象运行时执行引擎:Microsoft Component Object Runtime Execution Engine)中导入的,所以
    MSCorEE.dll将在程序集文件的导入(.idata)部分被引用。
    当托管EXE文件被调用时,Windows加裁器首先加裁该文件,检查.idata部分以发现MScorEE.dll需要被加裁到该进程的地址空间。然后加加载器获取MSCorEE.dll中_CorExeMain函数的地址,并正托管EXE文件中stub函数的JMP指令。
    进程的主线程开始执行x86 stub函数,该函数立即转到MSCorEE.dll中的_CorExeMain,_CorExeMain函数初始化CLR,然后查看可执行程序集的CLR表头以确定该执行哪个托管入口点方法,接着,该入口点方法的IL代码被编译成本地CPU指令,CLR跳转到本地代码(使用进程的主线程)。托管应用程序的代码开始运行。
    托管DLL启动CLR过程与托管EXE启动CLR过程类似,只是上述的x86 stub函数为:JMP _CorDLLMain.而且是调用MScorEE.dll中的_CorDllMain函数.