I wrote a c++ program and I want to execute my second program inside it, which is a exe file. The problem is I want to share my program to others as one single file.
When I search on the internet, I found this solution.
Just store the second .exe file as a binary resource inside the main .exe using an .rc file at compile-time. At run-time, you can access it using
FindResource()
,LoadResource()
, andLockResource()
, and then write it out to a temp file on disk before passing it tosystem()
.
But I don't understand how to "store the .exe file as a binary resource"
I am currently using CreateProcess()
to start my second program which working greatly.
Can anyone write some example for me?
In your project's resource script (the .rc
file in which icons, dialogs, etc. are defined), you can add a binary resource with a line like the following:
IDB_EMBEDEXE BINARY "<path>\\EmbedProgram.exe"
Where the IDB_EMBEDEXE
token/macro should be defined in a header file that is included by both that resource script and any C++ source(s) that use(s) it; this will be the lpName
argument given to the FindResource()
call, which you can form using MAKEINTRESOURCE(IDB_EMBEDEXE)
. Specify "BINARY"
(or L"BINARY"
for Unicode builds) for the lpType
argument.
Like this:
#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"
The specified executable file will then be completely embedded (as a binary) resource in your built executable, and can be extracted, written to disk and executed as described in the article you quote.