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

迅雷界面为例:

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

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

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

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

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

NSIS自定义目录选择页面制作之安装…的更多相关文章

  1. NSIS:禁止选择安装路径和编辑安装目录

    原文 NSIS:禁止选择安装路径和编辑安装目录 如果你想在安装包中禁止用户选择安装路径和编辑安装目录,有两种方式.   第一种:注释或删除安装目录选择页面 1 ;!insertmacro MUI_PA ...

  2. NSIS:在注册表中记录安装路径以便重装或升级时读取

    原文 NSIS:在注册表中记录安装路径以便重装或升级时读取 在NSIS中,这个功能是非常有用的,可以避免用户把程序安装到多个位置的尴尬. 第1步:在“安装目录选择页面”前面加入以下代码: 1 !def ...

  3. 第三章 “我要点爆”微信小程序云开发之点爆方式页面和爆炸之音页面制作

    点爆方式选择页面制作 在app.json中配置页面路径增加selectbao点爆方式选择,编译创建页面文件,点爆方式选择页面通过单选按钮组选择跳转到相应的点爆页面. <view class=&q ...

  4. CentOS7下自定义目录安装mono+jexus教程

    一.阅读前须知: 1.本文属于安装完Centos7之后的步骤 2.如果还不了解mono,请点击mono 3.本篇主要内容是使用自定义目录安装mono+jexus教程,使用默认目录请查看使用默认目录安装 ...

  5. 制作Java安装程序

    这个工具利用 ANT 来制作在 Windows, MacOS X, Unix 平台上可执行的文件,比如 exe,zip,jar.ROXES ANT Tasks 基于 GPL 发布. http://ww ...

  6. WordPress个性页面制作教程

    写在前面的话: 有很多WordPress小伙伴想制作不同风格的页面来满足自己的个性需求 但是大多数模板提供的页面模板非常有限,该如何手动制作属于自己风格的模板页呢? 其实,正如以上所说的,每个人都想拥 ...

  7. 一个基于React整套技术栈+Node.js的前端页面制作工具

    pagemaker是一个前端页面制作工具,方便产品,运营和视觉的同学迅速开发简单的前端页面,从而可以解放前端同学的工作量.此项目创意来自网易乐得内部项目nfop中的pagemaker项目.原来项目的前 ...

  8. IDM自定义报错页面

    由于用户两次重复单点登录会跳转至原生态ORACLE的错误页面页面.请提供配置方法.原因:是由于重复登录导致的.解决方案:Oracle官方给出了具体的解决方案,具体如下:I.创建战争档案a.创建目录&q ...

  9. ReactNative: 将自定义的ReactNative组件制作成第三方库的详细流程(制作-->发布)

    一.简介 在讲本篇博文之前,需要你熟知怎么自定义ReactNative组件,然后才好学习将自定义的ReactNative组件制作成第三方库.本文中的自定义的ReactNative组件LoginMana ...

随机推荐

  1. WPF 实现用户头像选择器

    制作一个用户头像选择器仿 WeGame 制作一个用户头像选择Canvas为父控件所实现,展示图片使用Image,Path当作上方的蒙版; Canvas:主要用途方便移动Image,设置ClipToBo ...

  2. 在docker容器中如何自动生成配置文件(以nginx配置为例)

    应用场景类似于多个域名要起多个容器,有些参数有些域名需要,有些域名不需要,或者参数的值不太一样,需要去对应的配置文件修改,不太灵活,如果通过变量的方式直接定义在Dockerfile文件中,需要哪些参数 ...

  3. salt stack学习笔记

    saltstack运行模式: local master/minion salt ssh saltstack三大功能 远程执行命令 配置管理(状态管理) 云管理 安装: master  salt-mas ...

  4. vscode无法调试python2.7版本

    概述 好久没有用python2.7版本了,最近有个老的脚本要优化,但是发现vscode无法对脚本调试,特此记录下解决方法. 本地安装有python2和python3,开发过程中,vscode可以随时调 ...

  5. PostgreSQL定时备份

    # PostgreSQL定时备份 # 版本:PostgreSQL14.0 # 一.如果你在pg_hba.conf中设定了密码登录,那么你就需要设置一个默认密码共psql登录的时候跳过验证.如果是roo ...

  6. 从零开始Blazor Server(9)--修改Layout

    目前我们的MainLayout还是默认的,这里我们需要修改为BootstrapBlazor的Layout,并且处理一下菜单. 修改MainLayout BootstrapBlazor已经自带了一个La ...

  7. Spring源码 08 IOC refresh方法3

    参考源 https://www.bilibili.com/video/BV1tR4y1F75R?spm_id_from=333.337.search-card.all.click https://ww ...

  8. mustache.js常见用法

    一.mustache基于JS模板引擎,能较为快捷和简单得实现数据得渲染 用法: 1.CDN引入mustache.js,以下是4.0.1版本,有需要可以去github上查询其他版本的代码. (funct ...

  9. 【LOJ#3197】【eJOI2019】T形覆盖 - (图论、简单推导)

    题面 题解 (题目中说的四种摆放方式实际上是分别旋转0°,90°,180°,270°后的图形) 题目中关于摆放方式的描述听起来很臭,我们把它转换一下,每个拼版先覆盖"上下左右中"五 ...

  10. 硬件IIC驱动原理

    1.IIC物理层 IIC通信属于同步半双工通信,IIC总线由两根信号线组成.一根是数据线SDA,一根是时钟线SCL,时钟线只能由主机发送给从机,数据线可以双向进行通信,总线上可挂载多个设备,挂载数量受 ...