.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)
.