我有一些代码,将字节数组(包含带有密码保护的存档)加载到内存流中,然后从其文件中提取到另一个内存流中,并尝试从文件中调用代码。该文件是C#3.5版可执行文件,但是当我尝试调用它时,出现错误System.Reflection.TargetParameterCountException。如果我使用干净的可执行文件创建一个新的字节数组,然后直接尝试调用它,则会遇到相同的错误。最有趣的是,我的其他应用程序使用了相同的方法,唯一的区别是,我在那里使用了gzip存档而不是zip存档。我还尝试将版本从4.0更改为3.5,以检查此错误是否是由于版本不同而导致的,但没有相同的结果。所以我不明白问题出在哪里。
using Ionic.Zip;
using System.IO;
using System.Reflection;
namespace InvokeFromProtectedZip
{
class Program
{
static void Main(string[] args)
{
byte[] fileData = {"contains archive with password protect"};
MemoryStream fd = new MemoryStream(fileData);
MemoryStream fs = new MemoryStream();
using (ZipFile zip = ZipFile.Read(fd))
{
zip.Password = "wininit";
zip["wininit.exe"].Extract(fs);
}
byte[] bytes = fs.ToArray();
Assembly assembly = Assembly.Load(bytes);
MethodInfo method = assembly.EntryPoint;
method.Invoke(null, null); //Error apears here -> System.Reflection.TargetParameterCountException
}
}
}