加载exe入口点C#时参数计数不匹配

时间:2016-11-10 03:38:33

标签: c#

我在一个字节数组中有一个.net exe。我将它作为程序集加载并尝试调用它的入口点

var assembly = System.Reflection.Assembly.Load(buff);
var entryPoint = assembly.EntryPoint;
var commandArgs = new string[0];
var returnValue = entryPoint.Invoke(null, new object[] { commandArgs });

使用我的测试程序女巫是一些愚蠢的命令行应用程序输出"你好",它的工作原理。但是对于其他一些第三方exe,它会因Parameter Count Mismatch

而失败
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
   at ConsoleApplication1.Program.a() in C:\Documents and Settings\user\Desktop\OLD\ConsoleApplication8\ConsoleApplication8\Program.cs:line 211
   at ConsoleApplication1.Program.Main(String[] args) in C:\Documents and Settings\user\Desktop\OLD\ConsoleApplication8\ConsoleApplication8\Program.cs:line 41

为什么?

这就是我所知道的那个exe - 它是.net,它有public static void main()方法,并且它被正确识别为入口点,并且它在单个exe中相对较小且简单的应用程序。

1 个答案:

答案 0 :(得分:1)

在.NET中,您可以使用string []类型的单个参数(例如 static void Main(string [] args))或没有参数(例如)声明入口点static void Main())。您尝试运行的exe文件可能使用后一种方法,因此您无法将任何命令行参数传递给它 - 至少是错误消息告诉您的错误 - 参数数量错误。

所以要运行它,你必须不带参数调用它:

var returnValue = entryPoint.Invoke(null, new object[] { });