文档章节

NSIS实现软件的捆绑安装

7分04秒
 7分04秒
发布于 2014/02/28 21:49
字数 751
阅读 2333
收藏 72
前几天完成了一个需求——在软件的安装程序完成页面提供了安装其他软件的checkbox选项。
实现效果如下图:


在NSIS界面上添加checkbox,目前我知道有三种方法:
我维护的代码,没有采用MUI2,然而从MUI升到MUI2不是一两行代码能搞定的事情。这次采用了修改ini配置文件的方法实现,其中参考以下两个地方:


finish页面对应的ini为$PLUGINSDIR\ioSpecial.ini,至于$PLUGINSDIR的目录,每次都不一样,在进入finish页面前,用MessageBox MB_OK $PLUGINSDIR阻塞页面并查看一下ioSpecial.ini的结构。
通过观察可以发现,在finish页面,如果没有阅读说明和运行选项时,只有3个控件。每多一项,就多一个控件。
下图是一个配置了阅读说明和运行选项的ioSpecial.ini


所以,要增加一个checkbox控件,只要按照[Field 5]的结构,在finish的PRE函数中,在ini中插入一个相同结构的[Field 6]就可以了!!

好了,可以着手写代码了!

如下代码是在配置了“阅读说明”和“运行”选项的finish界面中,添加了一个“setup”的checkbox。勾选的话,会弹出“select”,否则弹出“not select”。
这份示例代码,做几点说明:
  • checkbox要根据finish页面控件的情况,摆放到适合的位置。
  • finish_show中,把checkbox设置成白底黑字。如果不这样,那么新增的checkbox的背景是灰色的。
  • 如果不想在finish页面显示“运行”和“阅读说明”选项,除了更改代码外,还需要在finish_pre函数中加上一行:WriteINIStr "$PLUGINSDIR\iospecial.ini" "Field 3" "Bottom" "85"。因为在这种情况下,field3控件的范围很大,这样会遮住你新增的checkbox,每次要把鼠标移到该位置才能显示。
  • 如果想新增几个控件,注意一下checkbox的位置和控件的总数,然后把Field3的范围改小就可以了。你也可以做一个nsis脚本生成工具,这样的话,如果要更改finish页面上的checkbox数量,就不用手动写nsis代码了。
!define MUI_PAGE_CUSTOMFUNCTION_PRE finish_pre
!define MUI_PAGE_CUSTOMFUNCTION_SHOW finish_show
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE finish_leave
!insertmacro MUI_PAGE_FINISH

Function finish_pre
  WriteINIStr "$PLUGINSDIR\iospecial.ini" "Settings" "NumFields" "6"
  WriteINIStr "$PLUGINSDIR\iospecial.ini" "Field 6" "Type" "CheckBox"
  WriteINIStr "$PLUGINSDIR\iospecial.ini" "Field 6" "Text" "setup"
  WriteINIStr "$PLUGINSDIR\iospecial.ini" "Field 6" "Left" "120"
  WriteINIStr "$PLUGINSDIR\iospecial.ini" "Field 6" "Right" "315"
  WriteINIStr "$PLUGINSDIR\iospecial.ini" "Field 6" "Top" "150"
  WriteINIStr "$PLUGINSDIR\iospecial.ini" "Field 6" "Bottom" "160"
  WriteINIStr "$PLUGINSDIR\iospecial.ini" "Field 6" "State" "1"
FunctionEnd

Function finish_show 
  ReadINIStr $0 "$PLUGINSDIR\ioSpecial.ini" "Field 6" "HWND"
  # 设置白底黑字
  SetCtlColors $0 0x000000 0xFFFFFF
FunctionEnd

Function finish_leave
  Var /GLOBAL finish_page_field6_state
  !insertmacro MUI_INSTALLOPTIONS_READ $finish_page_field6_state "ioSpecial.ini" "Field 6" "State"
  ${If} $finish_page_field6_state == "1"
    MessageBox MB_OK "select"
  ${Else}
    MessageBox MB_OK "not select"
  ${EndIf}
FunctionEnd

© 著作权归作者所有

共有 人打赏支持
7分04秒
粉丝 5
博文 26
码字总数 15705
作品 0
深圳
程序员
私信 提问
C++开发NSIS插件,实现NSIS脚本的加解密功能

之前要做一个Windows平台上的一个安装包,要求能接受自定义参数,而参数可能会经过编码加密,所以要求安装包能够对参数进行decode。但是NSIS脚本并没有这方面线程的库,而NSIS脚本进行大量的...

cardinalinux
2016/06/16
599
0
NSIS custom page中多语言支持

大家好!我在封装一个软件时遇到一些问题,在这里请教各位了。谢谢! 我是用NSIS这个软件来封装软件的。在自定义页面中:有中文和英文,客户在安装时,在中文环境下安装是都能够正常显示的。...

YangChenfei
2012/03/06
1K
0
网友:开源免费 力挺珊瑚虫和陈寿福

珊瑚虫对于所有混迹于网络的朋友来说,就是一面旗帜。一个有三五年网龄的网友,不会不知道珊瑚虫给我们带来如此多实用便捷的功能。 至少我最开始接触程序语言,也是因为珊瑚虫。那个时候看着...

红薯
2009/06/08
1K
13
安装制作软件--Inno Setup

Inno Setup是一个免费的安装制作软件(开源),它既有适合新手的脚本向导,又有良好的脚本编辑环境,能够快速制作出标准Windows2000风格 的安装界面,足以完成一般的安装任务,在新版本版中软...

匿名
2009/06/08
14.2K
0
NSIS学习笔记(以Qt4程序打包为例)

一个Qt4程序安装(发布)后它应该有如下的结构(可参考 Qt 程序在 windows 下的发布 ): |-- sample.exe|-- QtCore4.dll|-- QtGui4.dll|-- imageformats/| |-- qjpeg4.dll 接下来我们使用nsis,...

晨曦之光
2012/05/08
736
0

没有更多内容

加载失败,请刷新页面

加载更多

Mariadb二进制包安装,Apache安装

安装mariadb 下载二进制包并解压 [root@test-a src]# wget https://downloads.mariadb.com/MariaDB/mariadb-10.2.6/bintar-linux-glibc_214-x86_64/mariadb-10.2.6-linux-glibc_214-x86_64.t......

野雪球
今天
3
0
ConcurrentHashMap 高并发性的实现机制

ConcurrentHashMap 的结构分析 为了更好的理解 ConcurrentHashMap 高并发的具体实现,让我们先探索它的结构模型。 ConcurrentHashMap 类中包含两个静态内部类 HashEntry 和 Segment。HashEnt...

TonyStarkSir
今天
3
0
大数据教程(7.4)HDFS的java客户端API(流处理方式)

博主上一篇博客分享了namenode和datanode的工作原理,本章节将继前面的HDFS的java客户端简单API后深度讲述HDFS流处理API。 场景:博主前面的文章介绍过HDFS上存的大文件会成不同的块存储在不...

em_aaron
昨天
3
0
聊聊storm的window trigger

序 本文主要研究一下storm的window trigger WindowTridentProcessor.prepare storm-core-1.2.2-sources.jar!/org/apache/storm/trident/windowing/WindowTridentProcessor.java public v......

go4it
昨天
7
0
CentOS 生产环境配置

初始配置 对于一般配置来说,不需要安装 epel-release 仓库,本文主要在于希望跟随 RHEL 的配置流程,紧跟红帽公司对于服务器的配置说明。 # yum update 安装 centos-release-scl # yum ins...

clin003
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部