Выполнить программу из 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 []), но вам, возможно, придется обойти разрешения доступа к коду, а некоторые антивирусы могут не позволить вам сделать это также.
Ключевым моментом здесь является сборка / загрузка сборки в память из байтового массива, см. Если у вас есть ссылка на сборку, вы можете легко получить доступ к ее типам и создать их экземпляры. Когда у вас есть экземпляры типов, вызовите метод для запуска вашей программы.