私はboxedapp.comプロジェクトのメイン開発者であり、それについて少しお話ししたいと思います。 何らかの理由で、ロシア語を話すユーザーが私たちの開発に興味を持っていることはほとんどありません。
確かに多くの人がthinstallのことを聞いています。 これは、必要なすべてのファイルとレジストリキーと共にexeをパックして、どこでも実行できる単一のexeにすることができるツールです。
似たようなものを、開発者向けに直接作成することにしました。 仮想ファイル、レジストリキーなどを作成できるSDKの一種
そして実際、なぜこれが必要なのでしょうか?
たとえば、プログラムで使用される複数のdllがあります。 タスクはそれらを引き続き使用することですが、これらのファイルの存在の事実を隠すことです。 TEMPにdllを保存するオプションは良くありません-い、十分な権限を持っていない可能性がありますが、あなたは何を知っているのでしょう。 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);
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);
HMODULE hModule = LoadLibrary(_T("Z:\\DLL1.dll")); typedef void (WINAPI *P_Function)(); P_Function pFunction = (P_Function)GetProcAddress(hModule, "Function"); pFunction(); FreeLibrary(hModule);
これは簡単な例です。
ActiveXを使用したい場合はさらに興味深いですが、多くの理由でクライアントコンピューターにActiveXを展開できません。 たとえば、いわゆる ポータブルアプリケーション。 そして、ここで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")); }
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ランタイム)が、さらに多くのことができます:)
読んだら、あなたの注意をありがとう!