使用nsis开发自定义安装包使用心得,以及遇到坑
因为新公司需要开发pc应用的自定义安装包,开始时候计划使用nsis开发,论坛上面有很多不错的例子,而且完成度很强,
随便拿来修改使用,但是后续的开发过程中遇到的问题就逐个出现。
首先说一下nsis的优点:
1.脚本开发,编译打包开发速度比纯c++快。
2.中文文档翻译清晰,新手可以直接上手调用api完成。
3.官网各种插件种类繁多,可以按照项目需要下载所需dll。
优点很多,这里写不下。
然后吐槽一下缺点以及遇到的坑。
1.解压安装文件过程中,论坛上的很多例子都是把启动文件一个个File到安装目录,这个对于开发者来说,很不友好,每次打包加一个文件需要改动nsi脚本。网上很多其他方法的例子,例如使用BgWorker + Nsis7z 两个插件,BgWorker开辟一个后台线程,Nsis7z负责在线程中解压7z压缩包,这个方法的设计思想十分合理,不使用安装Section,使用解压压缩包 的进度取代。
在测试几次的过程中,我发现nsis7z插件偶尔会解压失败,直接跳过解压,让我很不解为什么有bug的插件还会放到官网提供下载。后面我改用unzip.cpp去解压zip,再也没有出现解压失败,注意的是,打包dll一定要添加mfc静态库,不然会调用失败。
这里提供源码项目下载:https://pan.baidu.com/s/1y1AMGEeplJg-nmPCTLZDkg
2.nsDialog是官网附带的插件,封装了很多控件类型,例如图片,文本,按钮,超链接,单选框等等。但是注意的是,这些控件使用的资源只支持bmp位图,因为他只调用loadbitmap的api设置控件的背景。对于带有透明度的异形窗口却无能为力。我曾经在官网上下载了有关使用png图片的插件,都只能是调用BitBlt拷贝图片颜色数据,图片透明区域使用黑色填充。开始时打算使用Gdi+画png图片到nsDialog的bitmap控件中,然后设置窗口风格为WS_EX_LAYERED,再使用UpdateLayeredWindow画png到窗口,我在win10测试完全没有问题,但放到win7中,就画不出来了,度娘之后,才知道win7系统以下(包括win7)WS_EX_LAYERED风格只能用在没有WS_CHILD风格的窗口中,也就是说子窗口不能设置WS_EX_LAYERED风格,而且
UpdateLayeredWindow函数会让子控件都透明。后来请教了贾可大神,他的方案有两个,一个是使用DirectUI绘制,一个是使用叠层窗口,考虑到使用DirectUI需要重新开发ui,时间紧凑,抛弃了这个方案,最后使用叠层窗口。还好有nsWindows插件,可以直接在脚本创建顶层窗口,在顶层窗口中创建其他控件。
这里提供源码项目下载:https://pan.baidu.com/s/14MKLMAQrBc525V9ptvf58w
3.制作html安装协议,安装协议一般是用文本显示,我看了其他热门的pc应用,他们都使用打开一个h5页面显示协议,这里推荐一个制作h5页面的网站,直接将work文档上传,就可以生成h5页面。http://www.docpe.com/word/word-to-html.aspx
4.关于优化安装包启动速度,我的意见是,当自定义页面有很多File出来的文件,可以在每个页面开始前再File出当前页面所需资源,减少启动时间。
使用nsis开发自定义安装包使用心得,以及遇到坑的更多相关文章
- VM安装之分区、自定义安装包
一.分区 1.一般分为3个区:/root .swap./ 1)./root:引导分区.存放引导文件和Linux内核等. 启动文件:用于判断你需要启动哪个操作系统或者哪个内核: 内核:程序与硬件之间的桥 ...
- NSIS使用教程(安装包制作安装文件教程,如何封装打包文件) 中文版
nsis中文版(Nullsoft Scriptable Install System)是一个专业的开源的可以用来封闭Windows程序的实用工具,是一个开源的 Windows 系统下安装程序制作程序. ...
- python自定义安装包
python的第三方模块越来越丰富,涉及的领域也非常广,如科学计算.图片处理.web应用.GUI开发等.当然也可以将自己写的模块进行打包或发布.一简单的方法是将你的类包直接copy到python的li ...
- NSIS 制作简单安装包
;replace NSIS/Contrib/zip2exe/Modern.nsh;NSI format: Asni;http://nsis.sourceforge.net/ ;UAC级别Request ...
- 转---B/S结构JavaEE WebApp的全自动安装包制作心得
JavaEE的Web应用程序如今已大行其道,但其安装.配置.部署却一直繁琐无比,客观上阻碍了Web应用程序更大规模的推广和应用.因此,开发方制作一个集JDK.Web中间件.开源数据库的全自动安装程序很 ...
- iOS企业开发plist安装包实现
第一步: 在使用MACBOOK导出ipa的时候,我们得到ipa的同时,还得到一份plist文件 看到我们导出的plist,需要注意的地方有两个已经用中文标注. 一个是URL,一个是bundle-ide ...
- java开发相关工具安装包分享
链接:https://pan.baidu.com/s/19rSlXhrZ9AtNdai64tErGQ 提取码:04up
- Electron实战:创建ELectron开发的window应用安装包
前言:研究electron自动更新的时候,在electron的官方文档auto-updater 中,提到了在几个平台mac,Linux,windows下electron 的自动更新方法,其中winds ...
- NSIS打包(二)第一个安装包
基本介绍完之后,我们大概了解了NSIS中有哪些组件,现在我们通过一个简单的demo来学习如何使用这些组件. 1.环境配置 NSIS的环境非常简单,只有一个安装包,安装后即可使用. 官网:http:// ...
随机推荐
- 浅谈jrebel
有个同事提高个jrebel的工具,提起tomcat的热部署方案. jrebel是一款收费的JVM级的热部署工具包. JVM级的热部署也就是说,可以不重启JVM,让修改或添加的类加载到JVM中. 加载器 ...
- oracle 中 Start with...connect by 的用法(递归查询)
阿里电面问到了相关的知识,在网上找到这方面的文章. 这几个关键字是查询递归数据的,形成一个树状结构.目前只有oracle支持,其他数据都要结合存储过程实现 语法: select * from some ...
- web页面实时刷新之browser sync
web开发对实时刷新的需求 在刚开始学习前端时每次修改文件内容后都需要手工刷新下浏览器来看效果,做的次数多了就特别难受,有时仅仅修改了一个字母都需要刷新下页面查看 之后接触到编写边看的集成IDE,文件 ...
- idea创建Javaweb项目
1.Javaweb项目结构 1.1修改生成.class文件的位置为WEB-INF下的classes: 生成的.class文件位置: 1.2 设置第三方jar包添加位置:
- Ubuntu 网速显示,ssh配置
安装: sudo apt-get install python3-psutil curl git gir1.2-appindicator3-0.1git clone https://github.co ...
- windows server2008 64 asp.net 使用office组件环境配置.
服务器是windows server2008 64位系统, 我的系统需要用到Microsoft.Office.Interop.Excel组件 在上传Excel单据遇到错误:检索 COM 类工厂中 CL ...
- IDEA配置 tomcat server
- MongoDB之mongodb.cnf配置
# mongodb3.2.1 的主配置文件,将此文件放置于 mongodb3.2.1/bin 目录下 # hapday 2016-01-27-16:55 start # 数据文件存放目录 dbpath ...
- display详细说明
display:block,inline,inline-block区别 display:block就是将元素显示为块级元素. block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都可 ...
- ActiveMQ实例1--简单的发送和接收消息
一.环境准备 1,官网http://activemq.apache.org/下载最新版本的ActiveMQ,并解压 2,打开对应的目录,在Mac环境下,一般可以运行命令: cd /Users/***/ ...