C++ 如何提高7z.exe的可移植性

C++ 如何提高7z.exe的可移植性,c++,7zip,C++,7zip,我正在开发一个需要解压缩.zip文件的程序。在尝试了几种不同的方法之后,我发现唯一能满足我所有需求的方法是7z.exe。它在我开发的过程中非常有效,因为我可以将可执行文件的位置硬编码到代码中。但是,如果其他人尝试使用它,该部分将不起作用。有没有办法让他们访问这个?谢谢 我建议您使用压缩库(查看libarchive:)。如果不能做到这一点,则应随应用程序一起提供7z.exe及其依赖项,将它们放置在主可执行文件的固定相对位置。 然后使用GetModuleFileName获取主可执行绝对路径,使用pa

我正在开发一个需要解压缩
.zip
文件的程序。在尝试了几种不同的方法之后,我发现唯一能满足我所有需求的方法是
7z.exe
。它在我开发的过程中非常有效,因为我可以将可执行文件的位置硬编码到代码中。但是,如果其他人尝试使用它,该部分将不起作用。有没有办法让他们访问这个?谢谢

我建议您使用压缩库(查看libarchive:)。如果不能做到这一点,则应随应用程序一起提供7z.exe及其依赖项,将它们放置在主可执行文件的固定相对位置。 然后使用
GetModuleFileName
获取主可执行绝对路径,使用
pathcCombine
剥离并与相对路径组合:

char filename[MAX_PATH];
GetModuleFileName(NULL,filename,(sizeof(filename))/(sizeof char));
PathCchRemoveFileSpec(filename,(sizeof(filename))/(sizeof char));
PathCchCombine(filename,(sizeof(filename))/(sizeof char),filename,"./7zip/7zip.exe");
//the absolute path of 7z.exe is now in filename
GetModuleFileName
的文档:

pathchremovefilespec

对于
路径组合

char filename[MAX_PATH];
GetModuleFileName(NULL,filename,(sizeof(filename))/(sizeof char));
PathCchRemoveFileSpec(filename,(sizeof(filename))/(sizeof char));
PathCchCombine(filename,(sizeof(filename))/(sizeof char),filename,"./7zip/7zip.exe");
//the absolute path of 7z.exe is now in filename

我想您可以使用lib7zip。7zip是开源的-请随意使用:我没有想到压缩库,谢谢!