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

在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,虽然不是很规范,但彻底解决了关于路径判断的问题

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容