【发布时间】:2014-07-26 10:22:40
【问题描述】:
我的目标是将.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;
}
请帮帮我。 谢谢。
【问题讨论】:
-
为什么需要这个程序作为资源嵌入?除了主程序之外,您不能简单地安装它吗?
-
您使用的是 WinAPI,因此您可以使用 GetTempFileName() + GetTempPath() 来生成临时文件名。然后使用 fopen() 使用生成的文件名创建文件以进行二进制写入。然后使用你的 fwrite() + fclose()。然后 ShellExecute() 用于运行应用程序
标签: c++ exe temporary-files