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  ;关闭

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值