从binarry数组加载EXE文件并在C#中从主内存运行它

时间:2015-11-17 12:38:08

标签: c# .net-assembly

我正在开发一个应用程序,我想加载exe文件(这是我的应用程序中的嵌入式资源文件),然后从该byte []数组加载Assembly并在主内存中运行它。 我已关注此Stack Overflow Question和此Article 但是我收到了这个错误。

Error: could not load file or assembly

这是我的代码:

try
{
    using (FileStream fs = new FileStream(fileName, FileMode.Open))
    {
        BinaryReader br = new BinaryReader(fs);
        byte[] bin = br.ReadBytes(Convert.ToInt32(fs.Length));
        fs.Close();
        br.Close();
        Assembly a = Assembly.Load(bin);
        MethodInfo method = a.EntryPoint;
        if (method != null)
        {
            object o = a.CreateInstance(method.Name);
            method.Invoke(o, null);
        }
        else
        {
            MessageBox.Show("No method found!");
        }
    }
}
catch (Exception ex)
{
    MessageBox.Show("E^RR : " + ex.Message);
}

注意:嵌入式资源可以是任何设置文件,在这种情况下,我使用file_zilla设置作为嵌入式资源文件。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

可能有两个问题:

  1. 您尝试将64位程序集加载到32位进程中,反之亦然。这是不可能的。
  2. 您正在加载的程序集不是.NET程序集。这可能是FileZilla设置的情况。 .NET程序集与DLL或EXE不完全相同。它仅适用于托管代码。
  3. 如果您尝试加载常规FileZilla设置,它不是.NET程序集(来自dotPeek的屏幕截图):

    FileZilla is not a .NET assembly

    如果要运行本机可执行文件,请参阅您链接的问题的second answer