.NET: добавьте EXE-файл в мой проект

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

это возможно?

изменить:

это не .NET EXE. Во всяком случае, я добавил тест.EXE-файл в качестве ресурса для моего проекта, и я сделал это

   Dim exestr As Stream = Nothing
   Dim a As Assembly = Assembly.GetExecutingAssembly
   exestr = a.GetManifestResourceStream("Test.exe")  

3 ответов


Я думаю создать RAM-диска, напишите свой exe-файл/s в него из файла ресурсов .NET и выполните файл там. Ничто не касается физического диска.

У меня нет ссылки на программируемый RAM disk API, но вы, вероятно, можете найти что-то, чтобы манипулировать из своей программы. Другим преимуществом является то, что антивирусные сканеры все еще могут подтвердить его безопасность.

также я думаю, что если ваше приложение работает на диске, то нет никакой веской причины почему исполняемый файл, о котором идет речь, не может быть на диске. Если вы подключаете его по сети (загружаете) или что-то еще, то сначала сохраните на диск и удалите его после выполнения.


не возможно. Это было основное дизайнерское решение, принятое Дэйвом Катлером и co, когда они разрабатывали Windows NT. Процесс должны поддерживается файлом в файловой системе. Windows использует сопоставленный файл памяти для сопоставления кода процесса с виртуальной памятью. Это не отличается для программы .NET, хотя большая часть ее кода получает JIT, скомпилированный в память. Сборка, содержащая IL, сопоставляется таким же образом.

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


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

после загрузки сборки вы можете вызывать функции из внутренней сборки (например,Main способ) как и любая другая сборка, или вы можете написать AppDomain.CurrentDomain.ExecuteAssembly(innerAssembly.FullName).