我正在创建一个程序来查看是否可以在 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:必须在应用程序中创建第一个 IWin32Window 对象之前调用 SetCompatibleTextRenderingDefault。”
我的 program.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());
}
}
}
我还有什么其他方法可以打开整个程序?
提前致谢。