Tôi đang tạo một chương trình để xem liệu tôi có thể chạy một mảng byte trong C# hay không.Thực hiện mảng Byte như một chương trình mới
Chương trình sẽ lấy một mảng byte "MyBinaryData" và Tải + Chạy nó dưới dạng chương trình mới. Sẽ có một hộp văn bản nơi bạn có thể nhập các byte để xem kết quả (đó là một thử nghiệm;)). Tôi đã thử này:
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....
}
Vấn đề là nó mang lại cho lỗi này: "System.Reflection.TargetInvocationException: ...... SetCompatibleTextRenderingDefault phải được gọi trước khi đối tượng IWin32Window đầu tiên được tạo ra trong ứng dụng . "
thử nghiệm thứ hai của tôi là:
Assembly assembly = Assembly.Load(binaryData);
Type bytesExe = assembly.GetType(); // problem: the GetType(); needs to know what class to run.
Object inst = Activator.CreateInstance(bytesExe);
Nhưng điều này cần phải biết những gì lớp trong mảng byte nó cần phải chạy.
sau đó tôi đã cố gắng:
var bytes = Assembly.Load(binaryData);
var entryPoint = bytes.EntryPoint;
var commandArgs = new string[0];
var returnValue = entryPoint.Invoke(null, new object[] { commandArgs });
Nhưng nó đã cho tôi điều này: "System.Reflection.TargetInvocationException: ngoại lệ đã được ném bởi mục tiêu của một invocation ---> System.InvalidOperationException:. SetCompatibleTextRenderingDefault phải được gọi trước khi đối tượng IWin32Window đầu tiên được tạo trong ứng dụng. "
program.cs của tôi là:
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());
}
}
}
Tôi có thể làm gì cách khác này đã toàn bộ chương trình mở?
Xin cảm ơn trước.
Rõ ràng bạn không chỉ cần gõ byte ngẫu nhiên, byte [] bạn đang sử dụng là một assembly, một Winforms. Mà không * không * như nó khi bạn gọi EnableVisualStyles() sau khi chương trình đã bắt đầu. Vâng, khi các byte làm. –
Có, nó không phải là ngẫu nhiên, nhưng mã hết hạn. Cảm ơn vì tiền hỗ trợ! – SteveLacy