NSIS自定义目录选择页面制作之安装…

24 篇文章 1 订阅

在nsis制作自定义界面中,目录选择页面个人感觉最为繁琐,因为该界面不仅涉及到界面控件的创建,还要涉及到控件消息传递和状态改变时的回调函数通告。

迅雷界面为例:

其中安装目录中的8盘符,在本机中并不存在,为避免用户安装出错,在控件的通告函数中禁用下一步,等待用户修改为可用磁盘。

Function OnChange
     ${NSD_GetText} $INST_SDAT_LOC $6   ;获取控件文本状态,这里是指安装目录框的文字,也就是安装路径。
     StrCpy $INSTDIR $6  ;将值赋予常量
     ${GetRoot} "$INSTDIR" $R3   ;获取安装根目录
     StrCpy $R0 "$R3\"
     StrCpy $R1 "invalid"
     ${GetDrives} "ALL" "HDDDetection"            ;获取将要安装的根目录磁盘类型
 ${If} $R1 == HDD              ;是硬盘
     GetDlgItem $R7 $HWNDPARENT 1
     EnableWindow $R7 1
 ${Else}
     GetDlgItem $R7 $HWNDPARENT 1
     EnableWindow $R7 0
  ${endif}}
FunctionEnd

到了这一步,基本可以通过控件状态通告对安装路径是否有效进行自动处理。但还有一个问题,如果用户选择的目录有效,但磁盘剩余空间不足怎么办?原来想过在OnChange里面一起判断,后来经过测试发现,如果也一并单纯的禁用下一步,会让不太熟悉计算机的用户困惑,并且与上面的磁盘类型判断代码出现相同冲突,于是化繁为简,创建一个页面离开函数,在里面使用警告对话框提醒。

Function Page_leave
   ${NSD_GetText} $INST_SDAT_LOC $0
     StrCpy $INSTDIR $0
   ${GetRoot} "$INSTDIR" $R3
     StrCpy $R0 "$R3\"
   ${DriveSpace} "$R3\" "/D=F /S=M" $R0                  #获取指定盘符的剩余可用空间,/D=F剩余空间, /S=M单位兆字节
   ${If} $R0 < 110                                #110即程序安装后需要占用的实际空间,单位:MB
    MessageBox MB_OK|MB_ICONEXCLAMATION  "指定安装的分区剩余空间不足,请重新选择其它分区安装!"
    Abort
   ${endif}
 FunctionEnd


ok,虽然不是很规范,但彻底解决了关于路径判断的问题

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值