NSIS安装脚本中的那些坑

工作中接到任务需要参考某个软件制作安装包,于是就接触到了NSIS脚本,因为时间短,经验不足,遇到了很多坑,

记录一下以及对应的解决方式:

1、Label的刷新问题:在透明状态下,无法刷新,所有文字都重叠显示了。

       NSIS本身给出了官方解决方法:http://nsis.sourceforge.net/Refreshing_labels_after_color_change,就是要刷新的地方先Hide 再Show出来

       但是我在使用的时候发现,如果在另一个线程中(Timer触发的事件)频繁更新,就会频繁导致安装过程中崩溃。解决方法是设置label的底色和背景色接近,而不是透明  

       SetCtlColors $Lbl_Info 0xFFFFFF 0x111521(底色)


2、线程中(Timer触发事件)创建软件的快捷方式,真的是很无语,花了很多时间找原因,也没看到相关的说明。只能独立出来这部分功能


3、修改NSIS内部的UI。如果是自定义界面的话,就可能会涉及改变窗口大小的问题,一般情况下是不会有问题(不改变,NSIS的默认UI放在"%NSIS_Install_DIR%\Contrib\UIs"中,其中常常见到的创建自定义窗体的1018,1044都在此路径的modern.exe中)。但是在不修改默认大小的情况下,我们创建的界面小于默认尺寸,我们的界面就不会居中在桌面中,同样弹出对话框就不会居中在我们的自定义界面中。所以需要通过工具ResHacker修改对应dialog的高宽,和我们自定义的UI界面大小一致或接近注意里面的单位不是像素哦。


引用外部自定义UI方式:

;使用自定义的UI
!define MUI_UI "UI\mod.exe"


另一种方式更简单灵活些,用默认的modern.exe

获取屏幕大小然后自己确定位置

  System::Call 'user32::GetSystemMetrics(i 0) i .r0' ;宽
  System::Call 'user32::GetSystemMetrics(i 1) i .r1' ;高

  根据自己的需要处理$0 $1然后设置显示的坐标位置

  ${NSW_SetWindowPos} $HWNDPARENT $0 $1


4、 在安装过程中,如果强制关闭,会弹出是否终止安装的确认窗口,这个时候只要去掉 !define MUI_ABORTWARNING  ,然后再关闭中加入我们自己的业务逻辑即可。

关闭安装程序自身的方法:SendMessage $hwndparent ${WM_CLOSE} 0 0  ;关闭

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
NSIS 是“Nullsoft 脚本安装系统”(Nullsoft Scriptable Installation System) 的缩写,它是一个免费的 Win32 安装、卸载系统,采用了简洁高效的脚本方式。它本来是一个由 Nullsoft 创建并用于作为 Winamp 及其插件发布的系统,但现已被上百个应用程序所应用,作为它们进行程序发布的工具。 NSIS 创建的安装程序可以进行安装、卸载、设置系统设置、解压文件等等。几乎可以做所有事情。因为它基于脚本文件,所以你可以完全控制你的安装程序的每个部分。它的脚本语言支持变量、函数、字串处理,就像是一个普通的程序语言——但其仅设计用来创建安装程序。 此增强版除了主程序的翻译之外还把主要的文档作了翻译并修正了官方版本里简体文语言习惯用语不合适之处。单纯的使用脚本来编写安装程序对于大多数人来说不仅困难而且容易出错,为此,增强版里集成了一个相当好用的脚本编辑器 - VNISEdit。只需要根据向导就能轻松的做出很酷的安装程序,甚至,你还可以在向导里给你的安装程序添加启动画面、让你的安装程序在安装过程播放音乐,而这,只需要点几下鼠标即可。除此之外,VNISEdit 附带的注册表转换插件还可以把 .reg 文件一次性的转换为 NSIS 脚本,补丁制作向导可以一次性地为你生成体积超小的补丁升级程序。此增强版还在官方版本的基础上集成了一些有用的插件,比如 FindProc 可以根据可执行文件名查找进程是否在运行,这在制作补丁程序或者是汉化包时非常有用。由于各个组件在使用时各自独立,所以强烈推荐安装全部组件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值