使用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:// ...
随机推荐
- Java基础08-猜拳游戏
自己写的low代码 import java.util.*; public class Test1{ public static void main(String[] args){ System.out ...
- Oracle SQL Tuning Advisor 测试
如果面对一个需要优化的SQL语句,没有很好的想法,可以先试试Oracle的SQL Tuning Advisor. SQL> select * from v$version; BANNER --- ...
- pat1050. String Subtraction (20)
1050. String Subtraction (20) 时间限制 10 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Giv ...
- 根据时间显示不同的问候语的JavaScript代码
对于最近有许多的初学开发者问我关于根据时间显示不同的问候语的JavaScript代码问题,所以今天将自己整理的一些代码在这里分享出来,供初学者参考,如果在运行过程中有问题,可以给我在下方留言. < ...
- ip地址在通信中的变化(就简单的讲一下, 给自己mark)
节点之间的通信 数据报文的封装(自上而下) http tcp ip mac(讯框) 数据报文的源ip和目标ip是不变的(在内网中, 如果考虑到连接到外部网路的时候, 如果有路由器(里面有嵌入式的Lin ...
- [转]asp.net core视图组件(ViewComponent)简单使用
本文转自:http://www.cnblogs.com/dralee/p/6170496.html 一.组成: 一个视图组件包括两个部分,派生自ViewComponent的类及其返回结果.类似控制器. ...
- JQuery 技巧总结
一.简介 1.1.概述 随着WEB2.0及ajax思想在互联网上的快速发展传播,陆续出现了一些优秀的Js框架,其中比较著名的有Prototype.YUI.jQuery.mootools.Bindows ...
- .Net程序员学习Linux最简单的方法(转载)
有很多关于Linux的书籍.博客.大多数都会比较“粗暴“的将一大堆的命令塞给读者,从而使很多.NET程序员望而却步.未入其门就路过了. 所以我设想用一种更为平滑的学习方式, 就是在学习命令时,先用纯语 ...
- 微信小程序入门开发文档
第一步:下载微信小程序开发者工具并安装,下载路径: https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html 进到下载界面后,根 ...
- React 内部属性与函数
constructor 构造函数,在创建组件的时候调用一次. 例子: class TodoList extends React.Component { constructor(props, conte ...