3

我写了一个 c++ 程序,我想在其中执行我的第二个程序,它是一个 exe 文件。问题是我想将我的程序作为一个文件分享给其他人。

当我在互联网上搜索时,我找到了这个解决方案。

只需在编译时使用 .rc 文件将第二个 .exe 文件作为二进制资源存储在主 .exe 中。在运行时,您可以使用FindResource()LoadResource()和访问它LockResource(),然后将其写入磁盘上的临时文件,然后再将其传递给system().

但我不明白如何“将 .exe 文件存储为二进制资源”

我目前正在CreateProcess()启动我的第二个程序,该程序运行良好。任何人都可以为我写一些例子吗?

4

1 回答 1

5

在项目的资源脚本(.rc定义图标、对话框等的文件)中,您可以添加具有如下行的二进制资源:

IDB_EMBEDEXE    BINARY      "<path>\\EmbedProgram.exe"

IDB_EMBEDEXE令牌/宏应在该资源脚本和使用它的任何 C++ 源所包含的头文件定义;这将是调用的参数,您可以使用. 为参数指定(或用于 Unicode 构建)。lpNameFindResource()MAKEINTRESOURCE(IDB_EMBEDEXE)"BINARY"L"BINARY"lpType

像这样:

#define IDB_EMBEDEXE 13232 // Or whatever suitable value you need
//...
// In the C++ code:
HRSRC hResource = FindResource(NULL, MAKEINTRESOURCE(IDB_EMBEDEXE), _TEXT("BINARY"));
HGLOBAL hGlobal = LoadResource(NULL, hResource);
size_t exeSiz = SizeofResource(NULL, hResource); // Size of the embedded data
void*  exeBuf = LockResource(hGlobal);           // usable pointer to that data

// You can now write the buffer to disk using "exeBuf" and "exeSiz"

然后,指定的可执行文件将完全嵌入(作为二进制)资源在您构建的可执行文件中,并且可以按照您引用的文章中的描述进行提取、写入磁盘和执行。

于 2020-06-15T15:33:51.753 回答