【问题标题】:Execute a binary tmpfile in C++在 C++ 中执行二进制 tmpfile
【发布时间】: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


【解决方案1】:

据此:

http://man7.org/linux/man-pages/man3/tmpfile.3.html

文件在关闭后被删除,所以使用fflush 而不是fclose(在嵌入的exe 完成后运行fclose)。然后在这里找到有关文件名的一些信息:

Is there a way to get the filename from a `FILE*`?

【讨论】:

    猜你喜欢
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 2019-09-10
    • 1970-01-01
    • 2013-08-30
    • 2013-02-20
    相关资源
    最近更新 更多