为什么我不能从memorystream调用应用程序?

时间:2019-04-14 21:00:18

标签: c# visual-studio-2017 dotnetzip

我有一些代码,将字节数组(包含带有密码保护的存档)加载到内存流中,然后从其文件中提取到另一个内存流中,并尝试从文件中调用代码。该文件是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
        }
    }
}

0 个答案:

没有答案