从我的C#程序中,我试图直接从内存中执行一个包含另一个.NET可执行文件(一个C#控制台应用程序)的byte [],而又不接触磁盘。
我知道这里发布了类似的问题,还有一些关于如何做到这一点的好文章:
http://www.codeproject.com/Articles/13897/Load-an-EXE-File-and-Run-It-from-Memory
但是,它们都遇到相同的问题,但是它们只能用于在内存中执行Windows Forms应用程序,但是当我尝试执行Console-Applications时却无法正常工作。例子:
byte[] FileBytes = File.ReadAllBytes("C:\\MyTestProgram.exe"); // just for testing purposes
Assembly a = Assembly.Load(FileBytes);
MethodInfo m = a.EntryPoint;
m.Invoke(a.CreateInstance(m.Name), null);
当“ MyTestProgram.exe”是Windows窗体时,它会完美执行。但是,当“ MyTestProgram.exe”是控制台应用程序时,它将返回以下错误:
“未处理的异常:System.Reflection.TargetParameterCountException:参数计数不匹配”
请注意,控制台应用程序未接收任何参数,所以这很奇怪。
任何帮助将不胜感激:)
主要方法是静态的,您不需要传递Invoke
实例。您必须这样称呼它:
var parameters = m.GetParameters().Length == 0 ? null : new[] { new string[0] };
m.Invoke(null, parameters);
此代码可同时处理Main()
和Main(string[] args)
变体形式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句