将.exe文件嵌入C++程序中?

问题描述 投票:0回答:1

我写了一个c++程序,我想在里面执行我的第二个程序,这是一个exe文件。问题是我想把我的程序作为一个单独的文件分享给别人。

当我在网上搜索时,我发现了这个解决方案。

只要在编译时用一个.rc文件把第二个.exe文件作为二进制资源存储在主.exe里面。在运行时,你可以使用 FindResource(), LoadResource()LockResource()然后把它写到磁盘上的一个临时文件中,再传给 system().

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

我现在使用的是 CreateProcess() 启动我的第二个程序,这工作很大.任何人都可以为我写一些例子吗?

c++ windows cygwin exe embed
1个回答
3
投票

在你的项目的资源脚本中(在 .rc 文件中定义了图标、对话框等),你可以用下面的行添加一个二进制资源。

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

其中的 IDB_EMBEDEXE tokenmacro应该在头文件中定义,并由 两者 该资源脚本 任何使用它的C++源码;这将是使用它的 lpName 的参数。FindResource() 调用,您可以使用 MAKEINTRESOURCE(IDB_EMBEDEXE). 指定 "BINARY" (或 L"BINARY" 为Unicode构建)的 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"

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

© www.soinside.com 2019 - 2024. All rights reserved.