现在我们想实现这样的功能:
如果目标机器存在D盘,那么就安装程序到D盘,否则安装在系统盘。
后来又加了一个判断,即注册表中如果存在安装路径键值,则使用其键值作为安装路径。
 
思路:
通过检查D盘有没有磁盘空间来进行判断,如果D盘不存在,或者D盘是光驱,得到的磁盘空间必定是null。
 
示例:
!include "MUI2.nsh"
!include "FileFunc.nsh" RequestExecutionLevel admin Name "判断D盘存在与否确定安装路径"
Caption "判断D盘存在与否确定安装路径"
OutFile "test.exe"
InstallDir "$PROGRAMFILES\flighty app"
;读取注册中的安装路径,如果不存在则按照默认路径。
InstallDirRegKey HKCU "Software\flighty app" ""
BrandingText "www.flighty.cn" !insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "SimpChinese" Section
SectionEnd Section -Post
;在注册表中写入安装路径
WriteRegStr HKCU "Software\flighty app" "" $INSTDIR
SectionEnd Function .onInit
ReadRegStr $R4 HKCU "Software\flighty app" ""
StrCmp $R4 "" NO YES
NO:
StrCpy $R1 "D:\"
${DriveSpace} $R1 "/D=F /S=M" $R0
${If} $R0 = null
StrCpy $R1 "$PROGRAMFILES\flighty app"
${Else}
StrCpy $R2 "Program Files"
StrCpy $R3 "flighty app"
StrCpy $R1 "D:\$R2\$R3"
${EndIf}
;重新设置$INSTDIR默认值
StrCpy $INSTDIR "$R1"
YES:
Goto +1
FunctionEnd

[转]NSIS:判断D盘存在与否确定安装路径的更多相关文章

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

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

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

    在nsis制作自定义界面中,目录选择页面个人感觉最为繁琐,因为该界面不仅涉及到界面控件的创建,还要涉及到控件消息传递和状态改变时的回调函数通告. 迅雷界面为例: 其中安装目录中的8盘符,在本机中并不存 ...

  3. NSIS:使用PassDialog插件实现密码安装(卸载)功能

    原文 NSIS:使用PassDialog插件实现密码安装(卸载)功能 有时,出于特殊的需求,我们要给安装或卸载程序加一个密码,只有输入了正确的密码才可以继续.比如: 下面我们使用插件来实现安装密码: ...

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

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

  5. 判断当前系统当前浏览器是否安装启用 Adobe Flash Player,检查在chrome中的状态

    一.判断当前所在系统 let sUserAgent = navigator.userAgent;let isWin = (navigator.platform == "Win32" ...

  6. NSIS:制作软件升级安装包

    原文 NSIS:制作软件升级安装包 相信不是每个人写的软件都只发布一次就可以了,肯定要有修改和维护的情况发生.在这种情况下,您可能就需要一个软件的升级安装包了.   现在,我们就来一步步把这个安装包做 ...

  7. 全方位掌握nsis脚本

    NSIS 确实是一个不错的安装程序制作软件.新版本 2.0a7 真正实现了中文支持和支持 WinXP 的安装对话框. 不过要用它实现漂亮的安装界面和完美的安装功能就必须好好的写脚本. 而 NSIS 的 ...

  8. js判断本机是否已安装app

    需求:在浏览器或者app webview中打开的页面,js判断本机是否已安装搜狐新闻客户端. 一.微信 1.分享——好友/朋友圈,feed会有搜狐新闻标记,打开url后缀参数isappinstalle ...

  9. nsis制作启动Tomcat服务的exe安装包教程

    一. 准备工作 下载nsis相关工具包,点击此下载 1. 安装程序:nsis-2.46-setup.exe 2. 编辑程序:cnisedit203.exe 3. 帮助文档:NSIS205帮助文档.ra ...

随机推荐

  1. re 正则

      如果直接给出字符,就是精确匹配.对于特殊字符- ,在正则表达式中要用转义字符\转义.   \d        一个数字, \w       任意单个字符,空白符除外(例 字母.数字或下划线 . 英 ...

  2. Hadoop streaming使用自定义python版本和第三方库

    在使用Hadoop的过程中,遇到了自带python版本比较老的问题. 下面以python3.7为例,演示如何在hadoop上使用自定义的python版本以及第三方库. 1.在https://www.p ...

  3. HDU 3829

    http://acm.hdu.edu.cn/showproblem.php?pid=2970 P个小朋友喜欢猫讨厌狗,喜欢狗讨厌猫,移除一定数量的猫狗,使开心的小朋友数量最多 二分图最大独立集=顶点数 ...

  4. QT4 交叉编译

    配置 ./configure \-prefix /usr \-no-rpath \-embedded arm \-xplatform /qws/linux-arm-gnueabi-g++ \-dept ...

  5. Mat类型at问题-opencv-bug调试

    前言 调试程序的过程中,opencv创建矩阵之后对其赋值出现错误: Mat m = Mat::zeros(1, featureLen, CV_32FC1); Mat data = Mat::zeros ...

  6. Android中对文件的读写进行操作

    1. 在文件的地方生成一个read.txt文件,并且写入一个read数据.IO流用完之后一定要记得关闭. 对于try和catch是对于错误的抓取. 2. 首先先new file来找到那个文件,然后在通 ...

  7. CodeForces - 645F:Cowslip Collections (组合数&&欧拉函数)

    In an attempt to make peace with the Mischievious Mess Makers, Bessie and Farmer John are planning t ...

  8. BZOJ3879: SvT【后缀数组+单调栈】

    Description (我并不想告诉你题目名字是什么鬼) 有一个长度为n的仅包含小写字母的字符串S,下标范围为[1,n]. 现在有若干组询问,对于每一个询问,我们给出若干个后缀(以其在S中出现的起始 ...

  9. linux内核空间和用户空间详解

    linux驱动程序一般工作在内核空间,但也可以工作在用户空间.下面我们将详细解析,什么是内核空间,什么是用户空间,以及如何判断他们.Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Li ...

  10. 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(十)-- 发布(Windows)

    本篇将在这个系列演示的例子上继续记录Asp.Net Core在Windows上发布的过程. Asp.Net Core在Windows上可以采用两种运行方式.一种是自托管运行,另一种是发布到IIS托管运 ...