NSIS实现软件的捆绑安装

前几天完成了一个需求——在软件的安装程序完成页面提供了安装其他软件的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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NSIS(Nullsoft Scriptable Install System)是一款开源的安装程序制作工具,它提供了丰富的功能和灵活的脚本语言,可以用来制作各种类型的安装程序。 要实现安装界面的轮播效果,可以通过以下步骤来实现: 1.准备图片资源:首先需要准备好需要轮播的图片资源,可以将图片保存在安装包的一个目录下。 2.编写 NSIS 脚本:在 NSIS 脚本中,可以通过使用 MUI_PAGE_CUSTOMFUNCTION_PRE 和 MUI_PAGE_CUSTOMFUNCTION_LEAVE 两个宏来实现轮播效果。具体实现方法如下: ``` !include MUI.nsh ; 定义轮播图片的路径 !define IMAGE_PATH "images" ; 定义轮播图片的数量 !define IMAGE_NUM 3 ; 定义轮播时间间隔(单位:毫秒) !define INTERVAL 3000 Function MyCustomPage nsDialogs::Create 1018 Pop $0 ; 创建一个用于显示图片的 label 控件 nsDialogs::CreateControl STATIC, ${WS_VISIBLE}|${SS_BITMAP}, "STATIC", ${IMAGE_NUM}, 20u 20u 360u 220u "" Pop $1 ; 获取当前时间 System::Call "kernel32::GetTickCount()i.r1" ; 计算当前应该显示哪张图片 IntOp $2 $1 / ${INTERVAL} IntOp $2 $2 % ${IMAGE_NUM} ; 设置 label 控件的图片 System::Call "user32::LoadImage(p0, '${IMAGE_PATH}\image_$2.bmp', 1, 0, 0, 0x00000010)i.r2" SendMessage $1 ${STM_SETIMAGE} ${IMAGE_BITMAP} $2 nsDialogs::Show FunctionEnd ; 定义安装界面 !define MUI_PAGE_CUSTOMFUNCTION_PRE MyCustomPage !define MUI_PAGE_CUSTOMFUNCTION_LEAVE ClearErrors !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_LANGUAGE English ``` 在上面的脚本中,定义了三个宏:IMAGE_PATH、IMAGE_NUM 和 INTERVAL,分别表示轮播图片的路径、数量和时间间隔。在 MyCustomPage 函数中,首先创建一个用于显示图片的 label 控件,然后获取当前时间,计算当前应该显示哪张图片,最后设置 label 控件的图片。由于 MyCustomPage 函数会在每次切换页面时都会被调用一次,因此可以实现轮播效果。 3.将图片资源添加到安装包中:将所有轮播图片保存在同一个目录下,并将该目录添加到安装包中。 4.编译 NSIS 脚本:使用 NSIS 编译器编译 NSIS 脚本,生成安装程序。 5.测试安装程序:运行生成的安装程序,查看安装界面是否能够实现轮播效果。 以上就是实现 NSIS 安装界面轮播效果的步骤。需要注意的是,轮播图片的数量不能太多,否则可能会影响安装程序的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值