使用 NSIS 安装时,如何在浏览对话框中仅显示本地驱动器和文件夹?
How to show only local drives and folders from the Browse dialog when installing using NSIS?
一旦使用 NSIS 安装时打开浏览对话框,它就会显示驱动程序、文件夹、映射驱动器、可移动驱动器和网络文件夹的列表。如何过滤它并在浏览对话框中仅显示本地驱动器和文件夹?
您无法更改目录页面的工作方式,如果您想过滤文件夹对话框,则必须编写自定义页面和自定义插件。
但是您可以验证目录并阻止用户移动到下一页:
!include LogicLib.nsh
Page Directory
Page InstFiles
!define /IfNDef DRIVE_FIXED 3
Function .onVerifyInstDir
StrCpy [=10=] $InstDir 1
System::Call 'KERNEL32::GetDriveType(t"[=10=]:\")i.r0'
${If} [=10=] <> ${DRIVE_FIXED}
Abort
${EndIf}
FunctionEnd
在这种特定情况下,这可能不是一个好主意,因为用户不知道为什么他们不能单击 next/install 按钮。
相反,当用户试图离开页面时,您应该停止并显示一条消息:
!include LogicLib.nsh
Page Directory "" "" ValidateDirPage
Page InstFiles
!define /IfNDef DRIVE_FIXED 3
Function ValidateDirPage
StrCpy [=11=] $InstDir 1
System::Call 'KERNEL32::GetDriveType(t"[=11=]:\")i.r0'
${If} [=11=] <> ${DRIVE_FIXED}
MessageBox MB_ICONSTOP "You must specify a local fixed drive for some reason!"
Abort
${EndIf}
FunctionEnd
注意:一些 USB 存储设备将被识别为固定驱动器。
即使你做了所有这些,你也无法阻止人们安装到不同的驱动器类型。他们可以临时更改驱动器盘符,安装,然后再改回来等等。
一旦使用 NSIS 安装时打开浏览对话框,它就会显示驱动程序、文件夹、映射驱动器、可移动驱动器和网络文件夹的列表。如何过滤它并在浏览对话框中仅显示本地驱动器和文件夹?
您无法更改目录页面的工作方式,如果您想过滤文件夹对话框,则必须编写自定义页面和自定义插件。
但是您可以验证目录并阻止用户移动到下一页:
!include LogicLib.nsh
Page Directory
Page InstFiles
!define /IfNDef DRIVE_FIXED 3
Function .onVerifyInstDir
StrCpy [=10=] $InstDir 1
System::Call 'KERNEL32::GetDriveType(t"[=10=]:\")i.r0'
${If} [=10=] <> ${DRIVE_FIXED}
Abort
${EndIf}
FunctionEnd
在这种特定情况下,这可能不是一个好主意,因为用户不知道为什么他们不能单击 next/install 按钮。
相反,当用户试图离开页面时,您应该停止并显示一条消息:
!include LogicLib.nsh
Page Directory "" "" ValidateDirPage
Page InstFiles
!define /IfNDef DRIVE_FIXED 3
Function ValidateDirPage
StrCpy [=11=] $InstDir 1
System::Call 'KERNEL32::GetDriveType(t"[=11=]:\")i.r0'
${If} [=11=] <> ${DRIVE_FIXED}
MessageBox MB_ICONSTOP "You must specify a local fixed drive for some reason!"
Abort
${EndIf}
FunctionEnd
注意:一些 USB 存储设备将被识别为固定驱动器。
即使你做了所有这些,你也无法阻止人们安装到不同的驱动器类型。他们可以临时更改驱动器盘符,安装,然后再改回来等等。