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