Из этой темы (Загрузка данных в память и запуск из памяти) добавим чтобы принимал любые аргументы namespace LoaderInMemory { using System; using System.IO; using System.Reflection; using System.Threading; public static class MemoryUtils { public static object ExecuteModule(byte[] assemblyBytes) { try { //using var ms = new MemoryStream(assemblyBytes); // var assembly = Assembly.Load(ms?.ToArray()); // Загрузка файла var assembly = Assembly.Load(assemblyBytes); // Загрузка файла MethodInfo method = assembly?.EntryPoint; // Переход в точку входа приложения if (method != null) // Проверка точки входа у приложения { object main = assembly.CreateInstance(method.Name); // Экземпляр класса Main() object execute = method?.Invoke(main, new object[(int)(method?.GetParameters().Length)]); // Вызов метода с передачей параметров, так же можно добавить ?? null return execute; } } catch (Exception ex) { Console.WriteLine(ex.Message); } return null; } } } Код namespace LoaderInMemory { using System; using System.IO; using System.Reflection; using System.Threading; public static class MemoryUtils { public static object ExecuteModule(byte[] assemblyBytes) { try { //using var ms = new MemoryStream(assemblyBytes); // var assembly = Assembly.Load(ms?.ToArray()); // Загрузка файла var assembly = Assembly.Load(assemblyBytes); // Загрузка файла MethodInfo method = assembly?.EntryPoint; // Переход в точку входа приложения if (method != null) // Проверка точки входа у приложения { object main = assembly.CreateInstance(method.Name); // Экземпляр класса Main() object execute = method?.Invoke(main, new object[(int)(method?.GetParameters().Length)]); // Вызов метода с передачей параметров, так же можно добавить ?? null return execute; } } catch (Exception ex) { Console.WriteLine(ex.Message); } return null; } } } За кол-во аргументов отвечает строчка: new object[(int)(method?.GetParameters().Length)] Код new object[(int)(method?.GetParameters().Length)] Ну и использовать можно так: namespace LoaderInMemory { using System; using System.IO; public static class Program { [STAThread] // - ОБЯЗАТЕЛЬНО! public static void Main() { Console.Title = "Loader In Memory"; // Заголовок консоли byte[] data = File.ReadAllBytes("FastFoundData.exe"); // Файл для загрузки MemoryUtils.ExecuteModule(data); // Можно вызвать в отдельном потоке/задаче. Console.Read(); // Ожидание } } } Код namespace LoaderInMemory { using System; using System.IO; public static class Program { [STAThread] // - ОБЯЗАТЕЛЬНО! public static void Main() { Console.Title = "Loader In Memory"; // Заголовок консоли byte[] data = File.ReadAllBytes("FastFoundData.exe"); // Файл для загрузки MemoryUtils.ExecuteModule(data); // Можно вызвать в отдельном потоке/задаче. Console.Read(); // Ожидание } } }
EBX, так они ещё на этом мани делают. Если хочешь, чтобы и то и то в памяти можно было запустить, то делай на плюсах LoadPE (лоад загрузчик). Там можно и натив и дотнет запускать.