Выполнить программу из MemoryStream

Как я могу выполнить программу, которая находится в MemoryStream, чтобы мне не нужно было сначала сохранять ее на жесткий диск. Файл не может быть временно сохранен на жесткий диск. Программа должна быть на 100% функциональной из памяти.

        static   string strTemplate = "MyAPP.SOMEprogram.exe";
        byte[] template;
        int len = 0;

        Assembly assembly = Assembly.GetExecutingAssembly();
        using (Stream stream = assembly.GetManifestResourceStream(strTemplate))
        {

            len = (int)stream.Length;
            BinaryReader reader = new BinaryReader(stream);
            template = reader.ReadBytes(len);


        }

        MemoryStream ms = new MemoryStream(template, true);

Теперь все 100% работающие программы в MemoryStream (в оперативной памяти), могу ли я выполнить эту программу? Большое спасибо

3 ответа

Я не могу придумать очевидный способ сделать это. Самое близкое, что я могу придумать, - это использование RAM-диска - у вас не будет доступа к жесткому диску (кроме, возможно, подкачки), но это все равно сильно отличается от того, что вы просите.

Отметим, что я говорю о запуске произвольных программ, а не о загрузке управляемых сборок.

Вы можете попробовать Assembly.Load (byte []), но вам, возможно, придется обойти разрешения доступа к коду, а некоторые антивирусы могут не позволить вам сделать это также.

Ключевым моментом здесь является сборка / загрузка сборки в память из байтового массива, см. Если у вас есть ссылка на сборку, вы можете легко получить доступ к ее типам и создать их экземпляры. Когда у вас есть экземпляры типов, вызовите метод для запуска вашей программы.

Другие вопросы по тегам