好吧,我的第一个想法是:这个帮助程序可执行文件做了哪些在你的库代码本身中无法完成的工作,如果有必要,可能使用辅助线程。这可能是需要考虑的事情。
但至于实际问题......如果您的“库”实际上捆绑为 dll(甚至是 exe),那么至少 Windows 对在库中嵌入文件具有相对简单的支持。
允许将版本信息和图标等内容嵌入可执行文件的资源机制也可以允许任意数据块。由于我不知道您使用的是什么开发环境,因此我无法确切说明如何执行此操作。但粗略地说,您需要创建一个具有“文件”类型或类似类型的自定义资源,并将其指向您要嵌入的 exe。
然后,当你想提取它时,你会写类似
HRSRC hResource = FindResource(NULL, MAKEINTRESOURCE(IDR_MY_EMBEDDED_FILE), "FILE");
HGLOBAL hResourceData = LoadResource(NULL, hResource);
LPVOID pData = LockResource(hResourceData);
HANDLE hFile = CreateFile("DestinationPath\\Helper.exe", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
DWORD dwBytesWritten = 0;
WriteFile(hFile, pData, SizeofResource(NULL, hResource), &dwBytesWritten, NULL);
CloseHandle(hFile);
(填写您自己想要的路径、文件名,当然还有任何适当的错误检查)
之后,帮助程序 exe 以普通 exe 文件的形式存在,因此您可以按照通常的方式执行它。
要在使用后删除文件,您应该调查 的标志CreateFile
,尤其是FILE_FLAG_DELETE_ON_CLOSE
. 您还可以查看在MoveFileEx
将MOVEFILE_DELAY_UNTIL_REBOOT
标志与为新文件名传递的 NULL 组合时使用。当然,如果您知道可执行文件何时结束,您可以随时在自己的代码中删除它。
我对 Linux 可执行文件知之甚少,所以我不知道那里是否有类似的功能。
如果 Linux 没有提供任何方便的机制和/或如果这个想法不适合您在 Windows 中的需求,那么我想您从帮助程序 exe 的内容生成无符号字符数组的想法将是嵌入的下一个最佳方法库中的 exe。