使用NSIS安装时,如何在“浏览”对话框中仅显示本地驱动器和文件夹?

时间:2019-03-05 06:06:45

标签: nsis

使用NSIS安装后,一旦打开浏览对话框,它将显示驱动程序,文件夹,映射的驱动器,可移动驱动器和网络文件夹的列表。如何过滤它并从“浏览”对话框中仅显示本地驱动器和文件夹?

1 个答案:

答案 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存储设备将标识为固定驱动器。

即使执行所有这些操作,也无法阻止人们将其安装到其他驱动器类型。他们可以临时更改驱动器号,进行安装,然后将其改回等。