标签:nsis 压缩 c++
nsis的固实(solid)压缩
问题由解压框而来
解压框显示的逻辑是这样的
1,运行第一步是进行crc校验,校验的过程大约4kb的步长读取exe文件,并做crc校验,每一次校验检查当前校验时间是否已经超过了1s,超过则展现解压框
2,压缩文件时固实算法是,将所有文件按照如下格式 |FileSize|FileContent|FileSize2|FileContent2|... 将所有文件拼成一个大buffer,然后进行lzma压缩
解压时,每解压一个文件设定一个500ms的超时,若解压这个文件的过程中超过了此阈值,则显示解压框
解压某个文件时,传入这个文件解压后所在大buffer中的偏移,因此,解压过程是先从头至尾一点点解压这个dabuffer,一旦已解压的数据满足了取出这个offsert-size大小的要求即返回,因此若此文件在压缩过程中比较靠后,就会导致需要把前面的所有文件都解压出才能解压出这个文件的问题
解压框与主窗体是互斥的,因此一旦安装的主窗体创建,则不会显示解压框
解决:
1,保证压缩的顺序与解压顺序一致,这样可以将单个文件的解压时间放到最小
2,init以及插件dll保证最小使用
3,使用resverfile强制约束某些文件优先压缩
nsis的固实(solid)压缩原理
标签:nsis 压缩 c++
原文地址:http://blog.csdn.net/zamzll/article/details/46438419