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

本文关键字:参数 不匹配 exe 入口 加载 | 更新日期: 2023-09-27 18:17:24

我在字节数组中有一个。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巫婆是一些愚蠢的命令行应用程序,输出"hello",它的工作原理。使用其他第三方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,它有公共静态void main()方法,它被正确地识别为入口点,它是相对较小和简单的应用程序在一个单一的exe。

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

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

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

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