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()