BoxedApp Packer 2.1 и BoxedApp SDK 2.0: новые возможности
Наконец мы выпустили новые релизы с двумя очень интересными фичами:
- запуск процесса на основе виртуального файла
- общая виртуальная файловая система для нескольких процессов
Запуск процесса на основе виртуального файла
Если кратко, то, создав виртуальный файл с содержимым exe, можно запускать процесс на основе этого файла:
BoxedAppSDK_Init();
HMODULE hModule = GetModuleHandle(NULL);
HRSRC hResInfo = FindResource(hModule, _T("BIN1"), _T("BIN"));
HGLOBAL hResData = LoadResource(hModule, hResInfo);
LPVOID lpData = LockResource(hResData);
DWORD dwSize = SizeofResource(hModule, hResInfo);
HANDLE hFile =
BoxedAppSDK_CreateVirtualFile(
_T("app1.exe"),
GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
CREATE_NEW,
0,
NULL);
DWORD temp;
WriteFile(hFile, lpData, dwSize, &temp, NULL);
CloseHandle(hFile);
ShellExecute(NULL, NULL, _T("app1.exe"), NULL, NULL, SW_SHOW);
Общая виртуальная файловая система для нескольких процессов
Прежде BoxedApp SDK был ограничен единственным процессом, однако мы получили множество запросов, суть которых сводилась к необходимости давать доступ стороннему приложению к созданным в основном процессе виртуальным файлам.
Мы доработали BoxedApp, добавив функцию BoxedAppSDK_AttachToProcess, которая внедряет BoxedApp в процесс. После внедрения процесс начинает видеть все виртуальные файлы, что созданы или создаются в основном процессе. Он может модифицировать их и т.д. Иными словами, оба процесса полностью разделяют общую виртуальную файловую систему. Можно вызвать BoxedAppSDK_AttachToProcess сразу для нескольких процессов, и все они будут иметь одну и ту же виртуальную файловую систему.
Кроме того, добавлена опция DEF_BOXEDAPPSDK_OPTION__EMBED_BOXEDAPP_IN_CHILD_PROCESSES, которая указывает, следует ли внедрять BoxedApp в каждый дочерний процесс (по умолчанию, эта опция выключена), который создается в программе:
// да, внедрять в дочерние процессы BoxedAppSDK_EnableOption(DEF_BOXEDAPPSDK_OPTION__EMBED_BOXEDAPP_IN_CHILD_PROCESSES, TRUE); ... // нет, не внедрять в дочерние процессы BoxedAppSDK_EnableOption(DEF_BOXEDAPPSDK_OPTION__EMBED_BOXEDAPP_IN_CHILD_PROCESSES, FALSE);
[ Загрузить демонстрационные версии ]


Написать комментарий
Вы должны залогиниться чтобы комментировать. Залогиниться