Для этого в Windows нет встроенной функции; ваш единственный вариант - CreateProcess
, который принимает EXE-файл.
Можно проанализировать формат исполняемого файла самостоятельно. Вы бы эффективно воссоздали то, что делает функция LoadLibrary
.
Вот объяснение того, как загрузить DLL и вызвать функции внутри нее: http://www.joachim -bauch.de / tutorials / loading-a-dll-from-memory / Чтобы адаптировать это для вашего EXE, вы должны выполнить те же шаги перемещения и импорта. Когда вы закончите, вы позвоните в точку входа в EXE. (В учебном пособии объясняется, как вызвать экспортированную функцию DLL.)
В зависимости от содержимого EXE-файла у вас могут возникнуть проблемы с его загрузкой непосредственно в существующий процесс. Например, ваш собственный EXE-файл выполняет различный код инициализации Win32 и C, и встроенный EXE-файл, вероятно, попытается выполнить ту же самую инициализацию снова. Если это становится проблемой, ваша альтернатива - поместить встроенный EXE в свой собственный процесс; затем вы возвращаетесь к созданию временного файла и вызову CreateProcess
.