首页 > 其他分享 >使用NSIS打包超大型软件的几个注意事项

使用NSIS打包超大型软件的几个注意事项

时间:2023-03-29 09:55:06浏览次数:51  
标签:百分比 字节数 解压缩 Pop 超大型 NSIS 注意事项 NSISBI

1,NSIS原版不支持超过2G的软件打包,因此需要用NSISBI。官网下载NSISBI,用里面的内容替代原始的NSIS软件目录。

2,原有NSIS目录中的插件不要忘记拷贝到新NSIS目录中;由于NSISBI的Plugins目录中根据平台分了多个子目录,需要拷贝到相应平台的子目录中。

 

 

 3,NSISBI可以正常打包超过2G的安装包,但是如果原始软件文件大小超过4G多,在安装解压缩时显示的进度百分比会不正常。

这是因为进度条数值一般是利用NSIS的7z插件的"nsis7zU::ExtractWithCallback"方法来获取进度

    GetFunctionAddress $R9 ExtractCallback
    nsis7zU::ExtractWithCallback "$INSTDIR\${INSTALL_7Z_NAME}" $R9

"nsis7zU::ExtractWithCallback"方法会吐给Callback处理方法两个数值:当前解压缩字节数,最大字节数;通过这两个字节数的比值可以获得百分比。

问题在于这两个字节数貌似返回的是int32型,最大42亿。

如果打包的软件文件大小超过4个G多时,字节数就超过int32的最大值,导致溢出。

返回的最大字节数一开始就是溢出值,当前解压缩字节数逐步增大最后也会溢出,所以计算而得的百分比自然不正确了。

 

因为不知道nsis7z插件是否有新版提供int64返回值的支持,所以采用了一个对百分比取模的方法,一旦百分比超过100则舍去。

Function ExtractCallback
# $1为解压缩字节数,$2为字节总数。$0为取模后的百分比数值
    Pop $1
    Pop $2
    System::Int64Op $2 / 100
    Pop $3
    System::Int64Op $1 / $3
	Pop $4
	System::Int64Op $4 % 100
    Pop $0

...	

  

这样UI上的显示就是:百分比滚动条到达百分百,然后归零,再次达到百分百,重复N次。

虽然看起来效果不佳,但至少能够持续看到安装进程的变化。

 

 

参考文档:

如何解决NSIS 2G文件的限制

https://sourceforge.net/projects/nsisbi/

https://nsis.sourceforge.io/Nsis7z_plug-in

https://github.com/bajins/NSIS_SetupSkin

 

标签:百分比,字节数,解压缩,Pop,超大型,NSIS,注意事项,NSISBI
From: https://www.cnblogs.com/csliwei/p/17267678.html

相关文章

  • 3-1.3-3初识localStorage|3-5的localStorage的注意事项|课程总结
    localStorage是什么localStorage也是一种浏览器储存数据的方式(本地储存),他只是存储在本地,不会发送到客户端单个域名下的localStorage总大小有限制lo......
  • 河北稳控科技便携式钻孔测斜仪WIN使用注意事项
    河北稳控科技便携式钻孔测斜仪WIN使用注意事项 WIN型系列便携式钻孔测斜仪,为了正确使用仪器,在仪器使用之前,请确认已仔细阅读并理解了手册内容。建议您将此手册进行妥善......
  • 关于python编程中try...except的嵌套使用说明及注意事项
    今天笔者在写一个脚本时,情况比较复杂,在脚本中使用了try...except的嵌套,遇到了一些与预期不一样的结果于是笔者又研究了一下,try...except的嵌套使用,首先有一点是肯定的,那......
  • sharding-jdbc使用注意事项
    1使用原则 1)单表数据量达到5000万以上,考虑使用分库分表方案分表 2)读写分离可以考虑使用2列设计规范 1)主键使用bigint类型,使用雪花算法生成 2)禁止使用外键 ......
  • Qt—QtNetwork使用注意事项
    使用QtNetwrok库的https协议时,若出现UnknownNetworkError的错误,可能是因为缺少SSL相关的加密工具。解决方案:下载对应版本的OpenSSL,将两个对应的dll放入到exe同级目录下(O......
  • Qt—TableWidget组件使用注意事项
    TableWidget组件当开启了sortingEnable后,重新插入数据时,有时数据会消失。解决方案:每次在执行插入数据时,插入前关闭sortingEnable,插入后再打开sortingEnable。如图所示:......
  • 初识别localStorage、IocalStorage的注意事项
    初识别localStoragelocalStorage是什么localStorage也是一种浏览器存储数据的方式(本地存储),它只是存储在本地,不会发送到服务器端单个域名下的localS......
  • Cookie的封装、Cookie的注意事项
    Cookie的封装封装Cookie使用封装好的Cookie实现网站语言切换Cookie.html页面<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><tit......
  • Linux——注意事项
    Linux中,系统识别文件并不依赖后缀,但是为了方便我们管理服务器,建议对特殊文件添加拓展名,以下就是Linux中常见(常用)的拓展名。一、特殊文件添加拓展名  1、压缩文件 ......
  • 使用TK加速器运营TikTok的内容是什么?有哪些注意事项?
    作为一个TikTok内容创作者,使用TK加速器可以提高视频上传、编辑、发布和观看的速度,提高视频质量和流畅度,从而增加用户体验和吸引更多的粉丝。 以下是一些使用TK加速器运......