最近遇到一個問題:
就是在程序中直接運行一個非託管的EXE,該EXE已經在內存中了,我想直接運行起來;可是沒有找到辦法,CSDN裏的大蝦說這個託管代碼是做不到的。
請教了MVP,給了一個參考,可是還是沒有調用成功。很鬱悶。
代碼如下:
System.Reflection.Assembly asm = System.Reflection.Assembly.Load(Resource1.飛鴿傳書);
System.Reflection.MethodInfo mi = asm.EntryPoint;
object o = asm.CreateInstance(mi.Name);
mi.Invoke(o, null);
可是老是在加載時報錯BadImageFormatException異常:
未能加載文件或程序集“3305472 bytes loaded from WindowsApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一個依賴項。試圖加載格式不正確的程序。
偶是個很菜地程序員,看了下MSDN幫助上說:
在 C++ 可執行文件上反射可能會引發 BadImageFormatException。造成這種情況的原因極有可能是 C++ 編譯器去除了可執行文件中的重定位地址或 .Reloc 部分。若要保留 C++ 可執行文件的 .reloc 地址,請在鏈接時指定 /fixed:no。
希望能有解決地辦法
參考地址:
http://www.codeproject.com/KB/cs/LoadExeIntoAssembly.aspx
http://msdn.microsoft.com/zh-cn/library/h538bck7(VS.80).aspx