Здравствуйте, Хабровчане и Хабровчанки!
Я — главный разработчик проекта boxedapp.com и хотел бы немного рассказать о нем, т.к. почему-то очень мало русскоязычных пользователей интересуется нашей разработкой.
Наверняка многие слышали о thinstall. Это инструмент, который позволяет упаковать exe вместе со всеми файлами и ключами реестра, которые ему требуются, в единственный exe, который можно потом запускать где угодно.
Мы решили создать нечто подобное, но непосредственно для разработчиков. Некий SDK, который позволяет создавать виртуальные файлы, ключи реестра и т.д.
А, собственно, зачем это может потребоваться?
Например, у нас есть несколько dll-ек, которые используются в программе. Стоит задача продолжать их использование, но скрыть факт наличия этих файлов. Вариант сохранить dll-ки во TEMP не годится — некрасиво, может не хватить прав, да мало ли что. С помощью BoxedApp можно создать виртуальный файл с DLL-кой, загрузить в нее содержимое (откуда угодно):
Теперь используем dll-ку, как если бы она реально существовала:
Это простой пример.
Куда интереснее, когда мы хотим использовать ActiveX, но по ряду причин не можем развернуть его на клиентском компьютере. Например, мы пишем т.н. portable-приложение. И тут может помочь BoxedApp:
BoxedAppSDK_RegisterCOMLibraryInVirtualRegistry загружает указанный в качестве аргумента модуль и регистрирует его в виртуальном реестре. Реальный реестр при этом не изменяется, а все изменения сохраняются локально внутри текущего процесса. Когда позже какая-то функция позовет CoCreateInstance, и из недр COM подсистемы произойдет обращение к реестру — BoxedApp предоставит нужные ключи, и COM-объект будет успешно создан.
BoxedApp может еще очень многое (например, упаковывать .net runtime), а будет уметь еще больше :)
Если дочитали, то спасибо за внимание!
Я — главный разработчик проекта boxedapp.com и хотел бы немного рассказать о нем, т.к. почему-то очень мало русскоязычных пользователей интересуется нашей разработкой.
Наверняка многие слышали о thinstall. Это инструмент, который позволяет упаковать exe вместе со всеми файлами и ключами реестра, которые ему требуются, в единственный exe, который можно потом запускать где угодно.
Мы решили создать нечто подобное, но непосредственно для разработчиков. Некий SDK, который позволяет создавать виртуальные файлы, ключи реестра и т.д.
А, собственно, зачем это может потребоваться?
Например, у нас есть несколько dll-ек, которые используются в программе. Стоит задача продолжать их использование, но скрыть факт наличия этих файлов. Вариант сохранить dll-ки во TEMP не годится — некрасиво, может не хватить прав, да мало ли что. С помощью BoxedApp можно создать виртуальный файл с DLL-кой, загрузить в нее содержимое (откуда угодно):
HANDLE hFile__DLL1 =
BoxedAppSDK_CreateVirtualFile(
_T("Z:\\DLL1.dll"),
GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
CREATE_NEW,
0,
NULL
);
DWORD dwTemp;
WriteFile(hFile__DLL1, pBuffer, dwSize, &dwTemp, NULL);
CloseHandle(hFile__DLL1);
Теперь используем dll-ку, как если бы она реально существовала:
HMODULE hModule = LoadLibrary(_T("Z:\\DLL1.dll"));
typedef void (WINAPI *P_Function)();
P_Function pFunction = (P_Function)GetProcAddress(hModule, "Function");
pFunction();
FreeLibrary(hModule);
Это простой пример.
Куда интереснее, когда мы хотим использовать ActiveX, но по ряду причин не можем развернуть его на клиентском компьютере. Например, мы пишем т.н. portable-приложение. И тут может помочь BoxedApp:
void CreateVirtualFlashOCX()
{
LPVOID pBuffer;
DWORD dwSize;
...
HANDLE hVirtualFile1 =
BoxedAppSDK_CreateVirtualFile(
_T("C:\\Flash9e.ocx"),
GENERIC_READ,
FILE_SHARE_READ,
NULL,
CREATE_NEW,
0,
NULL);
DWORD dwTemp;
WriteFile(hVirtualFile1, pBuffer, dwSize, &dwTemp, NULL);
CloseHandle(hVirtualFile1);
BoxedAppSDK_RegisterCOMLibraryInVirtualRegistry(_T("C:\\Flash9e.ocx"));
}
BoxedAppSDK_RegisterCOMLibraryInVirtualRegistry загружает указанный в качестве аргумента модуль и регистрирует его в виртуальном реестре. Реальный реестр при этом не изменяется, а все изменения сохраняются локально внутри текущего процесса. Когда позже какая-то функция позовет CoCreateInstance, и из недр COM подсистемы произойдет обращение к реестру — BoxedApp предоставит нужные ключи, и COM-объект будет успешно создан.
BoxedApp может еще очень многое (например, упаковывать .net runtime), а будет уметь еще больше :)
Если дочитали, то спасибо за внимание!