Process.start() embedded exe без извлечения в файл first С#

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

Ответ 1

Вот что я собираю из вашего вопроса и ваших комментариев:

  • Вы хотите знать, возможно ли выполнить исполняемый файл, встроенный в вашу программу, без предварительного извлечения его на диск.
  • Ваша программа - это .NET-программа.
  • Исполняемый файл, который вы хотите выполнить, не является программой .NET.

Ответ на этот вопрос: да

Однако ответ на это также очень, очень, тяжелый

Что вам нужно сделать, и обратите внимание, что я не знаю всех подробностей об этом, так как я этого не делаю, но в любом случае:

  • Загрузите исполняемый код в память
  • Удалите все адреса в двоичном изображении так, чтобы они были правильны в отношении базового адреса, который вы загрузили исполняемый файл в
  • Возможно, загружаются внешние ссылки, т.е. другая DLL, необходимая для выполнения
  • Изменить адреса этих ссылок
  • Возможно, загрузите ссылки, необходимые для только что загруженных ссылок DLL
  • Remape the dll
  • Повторяйте с 3 по 6 до конца
  • Вызвать код

Я предполагаю, что ваш вопрос: "Могу ли я сделать 1 и 8", и ответ на это нет.

Ответ 4

Если вы не хотите его на жестком диске, вы можете посмотреть его сохранение на ram-drive, а затем запустить его оттуда.

Ответ 5

Это можно сделать, если ваш родной EXE не должен касаться диска.

См. здесь.... он показывает пример изображения "процесса", внедренного как ресурс. Он читается в памяти, а затем CreateProcess и выполняется ряд других действий для создания действующего "процесса".