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

时间:2013-08-30 12:20:45

标签: c++ 7zip

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

1 个答案:

答案 0 :(得分:1)

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

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的文档:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms683197(v=vs.85).aspx

PathCchRemoveFileSpec

http://msdn.microsoft.com/en-us/library/hh707092(v=vs.85).aspx

PathCchCombine

http://msdn.microsoft.com/en-us/library/hh707085(v=vs.85).aspx