因为新公司需要开发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开发自定义安装包使用心得,以及遇到坑的更多相关文章

  1. VM安装之分区、自定义安装包

    一.分区 1.一般分为3个区:/root .swap./ 1)./root:引导分区.存放引导文件和Linux内核等. 启动文件:用于判断你需要启动哪个操作系统或者哪个内核: 内核:程序与硬件之间的桥 ...

  2. NSIS使用教程(安装包制作安装文件教程,如何封装打包文件) 中文版

    nsis中文版(Nullsoft Scriptable Install System)是一个专业的开源的可以用来封闭Windows程序的实用工具,是一个开源的 Windows 系统下安装程序制作程序. ...

  3. python自定义安装包

    python的第三方模块越来越丰富,涉及的领域也非常广,如科学计算.图片处理.web应用.GUI开发等.当然也可以将自己写的模块进行打包或发布.一简单的方法是将你的类包直接copy到python的li ...

  4. NSIS 制作简单安装包

    ;replace NSIS/Contrib/zip2exe/Modern.nsh;NSI format: Asni;http://nsis.sourceforge.net/ ;UAC级别Request ...

  5. 转---B/S结构JavaEE WebApp的全自动安装包制作心得

    JavaEE的Web应用程序如今已大行其道,但其安装.配置.部署却一直繁琐无比,客观上阻碍了Web应用程序更大规模的推广和应用.因此,开发方制作一个集JDK.Web中间件.开源数据库的全自动安装程序很 ...

  6. iOS企业开发plist安装包实现

    第一步: 在使用MACBOOK导出ipa的时候,我们得到ipa的同时,还得到一份plist文件 看到我们导出的plist,需要注意的地方有两个已经用中文标注. 一个是URL,一个是bundle-ide ...

  7. java开发相关工具安装包分享

    链接:https://pan.baidu.com/s/19rSlXhrZ9AtNdai64tErGQ 提取码:04up

  8. Electron实战:创建ELectron开发的window应用安装包

    前言:研究electron自动更新的时候,在electron的官方文档auto-updater 中,提到了在几个平台mac,Linux,windows下electron 的自动更新方法,其中winds ...

  9. NSIS打包(二)第一个安装包

    基本介绍完之后,我们大概了解了NSIS中有哪些组件,现在我们通过一个简单的demo来学习如何使用这些组件. 1.环境配置 NSIS的环境非常简单,只有一个安装包,安装后即可使用. 官网:http:// ...

随机推荐

  1. (转)AIX 用户和组管理

    AIX 用户和组管理 原文:https://www.ibm.com/developerworks/cn/aix/library/au-aixuseradmin/ 管理 IBM AIX 中的用户和组是管 ...

  2. how to use Eclipse with Maven

    install Eclipse LUNA; download and unzip Maven; Eclipse=>window=>preference=>maven=>inst ...

  3. ubuntu14.04.2安装 YouCompleteme

    1 安装git ,按照这篇文章安装 http://www.cnblogs.com/or2-/p/4350252.html 2 安装编译需要的各种包 sudo apt-get install build ...

  4. lftp 快速使用

    登录 lftp username:password@ip:port 设置字符集 set ftp:charset 'gbk' set ftp:charset 'utf-8' 下载文件 mget *.tx ...

  5. Js中parseFloat()方法所产的精度不一致问题

    <script language="javascript"> function checkForm(){ var Sum="0.11"; var S ...

  6. DJ轮回舞曲网下载教程

    该网站网址为:http://www.92cc.com/ 昨天有网友问我这个网站能不能下载.我告诉他,只要能在线试听的就能下载 于是今天出个临时教程 教大家如何获取试听的音乐URL. 第一步找到试听的网 ...

  7. eclipse 构建从 SVN 上下载的可识别的 maven 项目

    从 SVN 上下载的 maven 项目中含有父项目,属于 maven 的嵌套,每个子项目和父项目虽有 pom.xml 文件,在结构上也是 maven 然而并不是 eclipse 识别的 maven 项 ...

  8. 五分钟急速搭建wordpress(博主亲测有效)

    第一步:下载WordPress安装包并解压 从此处下载WordPress压缩包并解压缩 http://wordpress.org/download/ 如果你想将WordPress上传至一个远程服务器, ...

  9. url长度

    今天在测试Email Ticket的时候发现在进行Mark as Read/Unread操作时,请求是通过GET方式进行的.URL中列出了所有参与该操作的Ticket Id.于是,我想起GET请求是有 ...

  10. js获取文件上传进度

    js获取文件上传进度: <input name="file" id="FileUpload" type="file" /> &l ...