如何解压内存中的7z固实压缩包(要求:不能产生临时文件)

gfm688 2012-05-15 09:54:20
用7-Zip将一个文件夹里的所有文件压缩成7z文件,把这个7z文件作为自定义资源添加到VC的工程中(不知道对资源大小有没有限制)

我想直接从资源中把7z里的文件解压出来,要求不能产生临时文件,不知能否实现?
...全文
1357 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
gfm688 2012-10-24
  • 打赏
  • 举报
回复
其实只要知道7z在exe文件中的偏移位置即可

估计QQ的也只是查找资源在exe文件中的偏移位置
网上可以找到找资源位置的方法,需要熟悉PE文件结构的

如果要exe要加壳压缩的话,就不建议把7z文件作为资源添加到exe里了,否则exe启动会变慢
gfm688 2012-05-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

http://blog.csdn.net/visualeleven/article/details/6035381
[/Quote]
不符合要求

要求直接从资源解压7z, 而不是释放到硬盘再解压
gfm688 2012-05-16
  • 打赏
  • 举报
回复
原来QQ安装程序一开始就把msi等文件释放到 %APPDATA%\Tencent\QQ\STemp

它确实是实现了从内存解压7z
gfm688 2012-05-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

QQ安装过程也得释放出来吧,咋能不需要。
[/Quote]

哦,我再看一下
「已注销」 2012-05-16
  • 打赏
  • 举报
回复
QQ安装过程也得释放出来吧,咋能不需要。
gfm688 2012-05-15
  • 打赏
  • 举报
回复
突然想起QQ的安装程序,它应该是把msi及要安装的文件压缩成7z然后添加到资源中的,但在安装过程中没发现有临时文件
gfm688 2012-05-15
  • 打赏
  • 举报
回复
其实是想探讨下用这样的方法制作安装程序的可行性,要求达到最高的压缩率,选择了LZMA + 固实压缩

网上找过了,LZMA SDK 也看了,从内存解压的都是单个文件的,没有多个文件压缩在一起的,7-Zip的源码倒没仔细看,要我看也看不懂

实在不行,我就用回NSIS,不过用了固实压缩会产生临时文件,比较讨厌
gfm688 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

//获取资源方法
HMODULE hModule;
hModule=GetModuleHandle(NULL);
HRSRC hRsrc = FindResourceW(hModule,(wchar_t*)IDR_PNG2, L"png");
//获取资源的大小
dwSize = SizeofResource(NULL, hRsrc);
if(dwSize)
{
//加载资源
……
[/Quote]

只说了的我早已会的知识点,解压那个重点却没说
paniclp 2012-05-15
  • 打赏
  • 举报
回复
别这样设计
flypig917 2012-05-15
  • 打赏
  • 举报
回复
//获取资源方法
HMODULE hModule;
hModule=GetModuleHandle(NULL);
HRSRC hRsrc = FindResourceW(hModule,(wchar_t*)IDR_PNG2, L"png");
//获取资源的大小
dwSize = SizeofResource(NULL, hRsrc);
if(dwSize)
{
//加载资源
hGlobal = LoadResource(NULL, hRsrc);
if (hGlobal)
{
buff = (char*)LockResource(hGlobal);
}
}
//最后就是解压buff数据了
向立天 2012-05-15
  • 打赏
  • 举报
回复
自定义资源应该没有大小限制吧
不过太大了会增大exe的大小
这就不太好了
内存解压如果你对压缩格式非常了解的话倒是可以实现
mabaoyes 2012-05-15
  • 打赏
  • 举报
回复
参考 http://topic.csdn.net/t/20040407/19/2937744.html
软件类别   国产软件 授权方式   共享版(文版免费) 运行环境   Windows 2000/2003/xp/vista/windows7 官方网址   http://cn.winmount.com 简要说明   WinMount是一款功能强大的Windows小工具,具备压缩软件的压缩、解压、浏览等功能,也具备挂载DVD,CD,虚拟机硬盘镜像的功能。WinMount最大特色在于,首创读取压缩新理念-Mount:直接将压缩Mount到虚拟盘,无需解压,打破压缩解压才能使用的传统。 功能列表   1.强大的压缩工具 WinMount操作界面   *支持将文件压缩为:MOU、ZIP、7Z   *支持解压缩和智能解压缩:MOU、RAR、ZIP、7Z   *支持在浏览界面直接浏览:MOU、RAR、ZIP、7Z   2.Mount新理念 - 挂载压缩到虚拟盘   WinMount将Mount(挂载)理念应用于压缩。MOU、RAR、ZIP 文件可以直接挂载到虚拟盘使用,不需   解压到本地硬盘。   3.挂载虚拟DVD/CD光驱   *支持将光盘镜像ISO、CUE/BIN、CCD 、BWT、MDS/MDF 、NRG 、IMG、ISZ 挂载到虚拟DVD-ROM。   *支持将音频格式APE、FLAC、WV、WAVE挂载为虚拟CD-ROM。   4.挂载虚拟硬盘镜像   支持将虚拟机硬盘镜像VHD(Virtual PC)、VDI(Virtual Box)、VMDK(VMWare)挂载为虚拟磁盘,并提供只   读和可写两种打开方式;   5.虚拟文件夹和过滤驱动技术(适用于专业版)   支持将MOU、ZIP、7Z、RAR和文件夹Mount到已存在的文件夹,并生成虚拟文件夹,该文件夹之前的文件   全部隐藏,所有操作都不会改变原文件夹。过滤驱动就是Mount到虚拟文件夹用到的驱动。   6.MOU新格式标准,高速率高压缩,免费使用   MOU是WinMount定义的压缩标准。MOU文件压缩比高,压缩时间短,能瞬时被打开,不解压,直接使用。   WinMount提供转换功能,可将RAR、ZIP、7Z文件转换为MOU.   7.WinMount硬盘格式WMT   支持创建WMT,并将文件存储到WMT。WMT是WinMount开发的硬盘格式,只能被WinMount打开。支持只读   和回写功能。   8.其它   *支持微软映像格式WIM挂载为虚拟盘;   *支持创建空白的RAM Disk,用于存储临时文件,重启软件或系统,将清空该盘的所有数据。 软件特色   1、不需要解压缩即可使用RAR   WinMount是一个 Windows 工具,可以把 ZIP、RAR等压缩文件mount 为一个虚拟盘符,这样你就可以直接使用里面的文件了,不需要展开。节省时间,节省空间。 WinMount安装界面   WinMoun t还支持多种光盘映像格式,括mou、ISO、 cue/bin、ccd (CloneCD)、bwt (Blindwrite)、mds(Media Descriptor File)、cdi (Discjuggler)、nrg (Nero)、pdi (Instant CD/DVD)、b5t (BlindWrite 5)、isz (Compressed ISO images)。这时WinMount是一个虚拟光驱软件。   2、WinMount,让你完全省去解压的等待时间!   一般我们从网上下载到ZIP或RAR文件,都要把它展开,才能使用。你可以双击这个ZIP或RAR文件, 解压软件会打开这个压缩文档里面的文件列表。你可以双击其的一个文件,好像可以自动打开,但实际上这个文件是被展开到临时目录后才打开的。这种展开操作通常很浪费时间。现在网络越来越快,我们下载的ZIP和RAR文件也越来越大, 几百兆上G的文件越来越多,花几十分钟解压一个压缩文档是常有的事。现在,有了 WinMount,你不再需要等待! 安装 WinMount 后,你只需要在资源管理器右键这个ZIP或RAR文件,选“Mount 至新驱动器”。几秒后, 系统会报告发现新硬件,一个新的盘符出现了,比如是S盘。打开S盘,压缩文件的所有文件都在了,你可以直接使用!   WinMount 可以建一个空的2GB的盘,经常有人问这个有什么用。这个空盘实际上相当于一个 RAMDisk,就是在内存的虚拟盘。所以它肯定速度快, 但一关机就什么都没有了。它新建立的时候,即使是新建一个1GB的空盘,实际上不消耗什么内存。当有写操作时,才会逐渐申请内存。   3、WinMount 改变你的电脑使用方式!   关于占用内存的问题,很多用户反映 WinMount 占用内存过多

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧