Вы не можете изменить способ работы страницы каталога, вам придется написать пользовательскую страницу и пользовательский плагин, если вы хотите отфильтровать диалог папки.
Однако вы можете проверить каталог и заблокироватьпереход пользователя на следующую страницу:
!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-устройства хранения данных будут идентифицироваться как фиксированный диск.
Даже если выделать все это, вы не можете остановить людей от установки на другой тип диска.Они могут временно поменять свои буквы дисков, установить, а затем изменить их обратно и т. Д.