NSIS自定义目录选择页面制作之安装…
在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,虽然不是很规范,但彻底解决了关于路径判断的问题
NSIS自定义目录选择页面制作之安装…的更多相关文章
- NSIS:禁止选择安装路径和编辑安装目录
原文 NSIS:禁止选择安装路径和编辑安装目录 如果你想在安装包中禁止用户选择安装路径和编辑安装目录,有两种方式. 第一种:注释或删除安装目录选择页面 1 ;!insertmacro MUI_PA ...
- NSIS:在注册表中记录安装路径以便重装或升级时读取
原文 NSIS:在注册表中记录安装路径以便重装或升级时读取 在NSIS中,这个功能是非常有用的,可以避免用户把程序安装到多个位置的尴尬. 第1步:在“安装目录选择页面”前面加入以下代码: 1 !def ...
- 第三章 “我要点爆”微信小程序云开发之点爆方式页面和爆炸之音页面制作
点爆方式选择页面制作 在app.json中配置页面路径增加selectbao点爆方式选择,编译创建页面文件,点爆方式选择页面通过单选按钮组选择跳转到相应的点爆页面. <view class=&q ...
- CentOS7下自定义目录安装mono+jexus教程
一.阅读前须知: 1.本文属于安装完Centos7之后的步骤 2.如果还不了解mono,请点击mono 3.本篇主要内容是使用自定义目录安装mono+jexus教程,使用默认目录请查看使用默认目录安装 ...
- 制作Java安装程序
这个工具利用 ANT 来制作在 Windows, MacOS X, Unix 平台上可执行的文件,比如 exe,zip,jar.ROXES ANT Tasks 基于 GPL 发布. http://ww ...
- WordPress个性页面制作教程
写在前面的话: 有很多WordPress小伙伴想制作不同风格的页面来满足自己的个性需求 但是大多数模板提供的页面模板非常有限,该如何手动制作属于自己风格的模板页呢? 其实,正如以上所说的,每个人都想拥 ...
- 一个基于React整套技术栈+Node.js的前端页面制作工具
pagemaker是一个前端页面制作工具,方便产品,运营和视觉的同学迅速开发简单的前端页面,从而可以解放前端同学的工作量.此项目创意来自网易乐得内部项目nfop中的pagemaker项目.原来项目的前 ...
- IDM自定义报错页面
由于用户两次重复单点登录会跳转至原生态ORACLE的错误页面页面.请提供配置方法.原因:是由于重复登录导致的.解决方案:Oracle官方给出了具体的解决方案,具体如下:I.创建战争档案a.创建目录&q ...
- ReactNative: 将自定义的ReactNative组件制作成第三方库的详细流程(制作-->发布)
一.简介 在讲本篇博文之前,需要你熟知怎么自定义ReactNative组件,然后才好学习将自定义的ReactNative组件制作成第三方库.本文中的自定义的ReactNative组件LoginMana ...
随机推荐
- WPF 实现用户头像选择器
制作一个用户头像选择器仿 WeGame 制作一个用户头像选择Canvas为父控件所实现,展示图片使用Image,Path当作上方的蒙版; Canvas:主要用途方便移动Image,设置ClipToBo ...
- 在docker容器中如何自动生成配置文件(以nginx配置为例)
应用场景类似于多个域名要起多个容器,有些参数有些域名需要,有些域名不需要,或者参数的值不太一样,需要去对应的配置文件修改,不太灵活,如果通过变量的方式直接定义在Dockerfile文件中,需要哪些参数 ...
- salt stack学习笔记
saltstack运行模式: local master/minion salt ssh saltstack三大功能 远程执行命令 配置管理(状态管理) 云管理 安装: master salt-mas ...
- vscode无法调试python2.7版本
概述 好久没有用python2.7版本了,最近有个老的脚本要优化,但是发现vscode无法对脚本调试,特此记录下解决方法. 本地安装有python2和python3,开发过程中,vscode可以随时调 ...
- PostgreSQL定时备份
# PostgreSQL定时备份 # 版本:PostgreSQL14.0 # 一.如果你在pg_hba.conf中设定了密码登录,那么你就需要设置一个默认密码共psql登录的时候跳过验证.如果是roo ...
- 从零开始Blazor Server(9)--修改Layout
目前我们的MainLayout还是默认的,这里我们需要修改为BootstrapBlazor的Layout,并且处理一下菜单. 修改MainLayout BootstrapBlazor已经自带了一个La ...
- Spring源码 08 IOC refresh方法3
参考源 https://www.bilibili.com/video/BV1tR4y1F75R?spm_id_from=333.337.search-card.all.click https://ww ...
- mustache.js常见用法
一.mustache基于JS模板引擎,能较为快捷和简单得实现数据得渲染 用法: 1.CDN引入mustache.js,以下是4.0.1版本,有需要可以去github上查询其他版本的代码. (funct ...
- 【LOJ#3197】【eJOI2019】T形覆盖 - (图论、简单推导)
题面 题解 (题目中说的四种摆放方式实际上是分别旋转0°,90°,180°,270°后的图形) 题目中关于摆放方式的描述听起来很臭,我们把它转换一下,每个拼版先覆盖"上下左右中"五 ...
- 硬件IIC驱动原理
1.IIC物理层 IIC通信属于同步半双工通信,IIC总线由两根信号线组成.一根是数据线SDA,一根是时钟线SCL,时钟线只能由主机发送给从机,数据线可以双向进行通信,总线上可挂载多个设备,挂载数量受 ...