使用NSIS安装后,一旦打开浏览对话框,它将显示驱动程序,文件夹,映射的驱动器,可移动驱动器和网络文件夹的列表。如何过滤它并从“浏览”对话框中仅显示本地驱动器和文件夹?
答案 0 :(得分:0)
您无法更改目录页面的工作方式,如果要过滤文件夹对话框,则必须编写一个自定义页面和一个自定义插件。
但是,您可以验证目录并阻止用户移动到下一页:
!include LogicLib.nsh
Page Directory
Page InstFiles
!define /IfNDef DRIVE_FIXED 3
Function .onVerifyInstDir
StrCpy $0 $InstDir 1
System::Call 'KERNEL32::GetDriveType(t"$0:\")i.r0'
${If} $0 <> ${DRIVE_FIXED}
Abort
${EndIf}
FunctionEnd
在这种特定情况下,这可能不是一个好主意,因为用户不知道为什么他们无法单击“下一步” /“安装”按钮。
相反,当用户尝试离开页面时,您应该停止显示消息:
!include LogicLib.nsh
Page Directory "" "" ValidateDirPage
Page InstFiles
!define /IfNDef DRIVE_FIXED 3
Function ValidateDirPage
StrCpy $0 $InstDir 1
System::Call 'KERNEL32::GetDriveType(t"$0:\")i.r0'
${If} $0 <> ${DRIVE_FIXED}
MessageBox MB_ICONSTOP "You must specify a local fixed drive for some reason!"
Abort
${EndIf}
FunctionEnd
注意:某些USB存储设备将标识为固定驱动器。
即使执行所有这些操作,也无法阻止人们将其安装到其他驱动器类型。他们可以临时更改驱动器号,进行安装,然后将其改回等。