C++ 在C+中执行二进制tmpfile+;

C++ 在C+中执行二进制tmpfile+;,c++,exe,temporary-files,C++,Exe,Temporary Files,我的目标是将.exe文件包装到另一个.exe文件中。无论何时启动包装器.exe,都应启动嵌入式.exe。 我已经添加了二进制文件作为资源。 现在,我想将该文件作为tmpfile加载,并使用system()函数或其他方法来执行二进制文件。但是,我无法获取tmpfile的文件名。我不能使用tmpnam,因为它只会返回一个文件名,而不会创建一个实际的临时文件 到目前为止,我的代码是: #include <iostream> #include <windows.h> #inclu

我的目标是将
.exe
文件包装到另一个
.exe
文件中。无论何时启动包装器
.exe
,都应启动嵌入式
.exe
。 我已经添加了二进制文件作为资源。 现在,我想将该文件作为tmpfile加载,并使用
system()
函数或其他方法来执行二进制文件。但是,我无法获取tmpfile的文件名。我不能使用tmpnam,因为它只会返回一个文件名,而不会创建一个实际的临时文件

到目前为止,我的代码是:

#include <iostream>
#include <windows.h>
#include <stdio.h>

using namespace std;

int main()
{
    HRSRC hRes = FindResource(0, MAKEINTRESOURCE(1), RT_RCDATA);
    HGLOBAL hMem = LoadResource(0, hRes);
    void* pMem = LockResource(hMem);
    DWORD size = SizeofResource(0, hRes);

    FILE * f = tmpfile();
    fwrite(pMem, size, 1, f);
    fclose(f);

    return 0;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
HRSRC hRes=FindResource(0,MAKEINTRESOURCE(1),RT_RCDATA);
HGLOBAL hMem=负载资源(0,hRes);
void*pMem=锁资源(hMem);
DWORD大小=SizeofResource(0,hRes);
文件*f=tmpfile();
fwrite(pMem,大小,1,f);
fclose(f);
返回0;
}
请帮帮我。 谢谢。

根据以下内容:

文件在关闭后被删除,因此使用
fflush
而不是
fclose
(在嵌入的
exe
完成后运行
fclose
)。然后在此处查找有关文件名的信息:


为什么需要将此程序作为资源嵌入?您不能在主程序之外安装它吗?您使用的是WinAPI,因此可以使用GetTempFileName()+GetTempPath()生成临时文件名。然后使用fopen()创建文件,并使用生成的文件名进行二进制写入。然后使用fwrite()+fclose()。然后运行应用程序的ShellExecute()