Выполнить массив байтов как новую программу

Я создаю программу, чтобы посмотреть, смогу ли я запустить массив байтов на C#.

Программа должна получить массив байтов "MyBinaryData" и загрузить+выполнить его как новую программу. Будет текстовое поле, где вы можете ввести байты, чтобы увидеть результат (это эксперимент;)). Я пробовал это:

 byte[] binaryData = System.IO.File.ReadAllBytes("MyBytes.txt");  // the bytes are in a .txt file for simple tests before becoming a textbox.
 Assembly LoadByte = Assembly.Load(binaryData);
        MethodInfo M = LoadByte.EntryPoint;

        if (M != null)
        {                object o = LoadByte.CreateInstance(M.Name);
            M.Invoke(o, new Object[] { null });  // this gives the error
        } 
        else {  
         ..... fail code here.... 
             } 

Проблема в том, что это дает эту ошибку: «System.Reflection.TargetInvocationException:......SetCompatibleTextRenderingDefault должен быть вызван до того, как в приложении будет создан первый объект IWin32Window».

Мой второй тест был следующим:

 Assembly assembly = Assembly.Load(binaryData);

 Type bytesExe = assembly.GetType(); // problem: the GetType(); needs to know what class to run.
 Object inst = Activator.CreateInstance(bytesExe);

Но для этого нужно знать, какой класс в байтовом массиве ему нужно запустить.

Затем я попытался:

var bytes = Assembly.Load(binaryData);
var entryPoint = bytes.EntryPoint;
var commandArgs = new string[0];
var returnValue = entryPoint.Invoke(null, new object[] { commandArgs });

Но это дало мне следующее: «System.Reflection.TargetInvocationException: Исключение было вызвано целью вызова. ---> System.InvalidOperationException: SetCompatibleTextRenderingDefault должен быть вызван до того, как в приложении будет создан первый объект IWin32Window».

Моя программа.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace Crypter
{
static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form2());
    }
}

}

Как еще я могу сделать это, чтобы открыть всю программу?

Заранее спасибо.

5
задан user1270384 18 May 2012 в 02:26
поделиться