Что ж, моей первой мыслью было бы: что делает этот исполняемый файл-помощник, чего нельзя сделать в самом коде вашей библиотеки, возможно, при необходимости используя вторичный поток. Это может быть что-то, чтобы рассмотреть.
Но что касается самого вопроса ... Если ваша "библиотека" фактически упакована как dll (или даже exe), то, по крайней мере, Windows имеет относительно простую поддержку для встраивания файлов в вашу библиотеку.
Механизм ресурсов, который позволяет встраивать такие вещи, как информация о версии и значки, в исполняемые файлы, также может разрешать произвольные порции данных. Поскольку я не знаю, какую среду разработки вы используете, я не могу точно сказать, как это сделать. Но, грубо говоря, вам нужно создать пользовательский ресурс с типом «ФАЙЛ» или чем-то вроде этого и указать его на исполняемый файл, который вы хотите встроить.
Затем, когда вы хотите извлечь его, вы должны написать что-то вроде
HRSRC hResource = FindResource(NULL, MAKEINTRESOURCE(IDR_MY_EMBEDDED_FILE), "FILE");
HGLOBAL hResourceData = LoadResource(NULL, hResource);
LPVOID pData = LockResource(hResourceData);
HANDLE hFile = CreateFile("DestinationPath\\Helper.exe", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
DWORD dwBytesWritten = 0;
WriteFile(hFile, pData, SizeofResource(NULL, hResource), &dwBytesWritten, NULL);
CloseHandle(hFile);
(ввод вашего собственного желаемого пути, имени файла и любой соответствующей проверки ошибок, конечно)
После этого вспомогательный exe-файл существует как обычный exe-файл, и вы можете выполнить его, как обычно.
Для удаления файла после использования вы должны изучить флаги для CreateFile
, в частности FILE_FLAG_DELETE_ON_CLOSE
. Вы также можете посмотреть на использование MoveFileEx
при объединении флага MOVEFILE_DELAY_UNTIL_REBOOT
с NULL, переданным для нового имени файла. И, конечно, вы всегда можете удалить его в своем собственном коде, если можете сказать, когда закончился исполняемый файл.
Я недостаточно знаю об исполняемых файлах Linux, поэтому не знаю, доступна ли там подобная функция.
Если Linux не предоставляет какого-либо удобного механизма и / или если эта идея не соответствует вашим потребностям в Windows, то я полагаю, что ваша идея генерировать массив unsigned char из содержимого вспомогательного exe-файла будет следующим лучшим способ вставить exe в вашу библиотеку.