Я создаю установщик, используя NSIS. Этот установщик фактически устанавливает две программы в двух разных каталогах в одном и том же установщике. Я делаю это, используя страницы современного пользовательского интерфейса (MUI) и просто дважды вызывая MUI_PAGE_DIRECTORY, указывая различные начальные параметры, и захватывая каталог в макросе LEAVE. Что мне интересно, могу ли я как-то вызвать InstallDir в функции или установить значение автозаполнения каталога в функции? Или, возможно, даже вызвать функцию после того, как кнопка обзора была возвращена из?
Причина, по которой я хочу это сделать, заключается в том, что когда пользователь нажимает кнопку обзора на любой из двух страниц каталога, после того как он выбирает каталог, к нему добавляется имя конечного каталога, указанного в InstallDir.
Например:
Значение InstallDir для программы 1: c: \ client
Значение InstallDir для программы 2: c: \ program files \ server
пользователь нажимает кнопку просмотра программы 1 и выбирает c: \ temp, в результате получается путь c: \ temp \ client
пользователь нажимает кнопку просмотра программы 2 и выбирает c: \ независимо от полученного пути c: \ what \ server
Для справки приведем фрагменты кода того, что у меня работает, но не касается поведения кнопки автоматического добавления:
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE ClientDirectoryLeave
!insertmacro MUI_PAGE_DIRECTORY
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE ServerDirectoryLeave
!insertmacro MUI_PAGE_DIRECTORY
; Setup the page display for the client install page
Function ShowPageClient
!insertmacro MUI_HEADER_TEXT "Client" "Client"
!insertmacro MUI_INNERDIALOG_TEXT 1006 "Client"
; setup intal directory
Push $0
StrCpy $0 $PROGRAMFILES 2 #
; CLIENT_FOLDER_NAME is defined as a folder, but this would basicaly
; result in C:\Client as the first 2 characters of $PROGRAMFILES
; is the hard drive with program files installed on it
StrCpy $INSTDIR "$0\${CLIENT_FOLDER_NAME}"
Pop $0
; set the inital value of the directory text box
!insertmacro MUI_INNERDIALOG_TEXT 1019 $INSTDIR
; find and disable the directory selection box
; We do not want users to type in this box
FindWindow $R0 "#32770" "" $HWNDPARENT
GetDlgItem $R1 $R0 1019 ;Text Box
EnableWindow $R1 0
FunctionEnd
; Setup the page display for the server install location page
Function ShowPageServer
!insertmacro MUI_HEADER_TEXT "Server" "Server"
!insertmacro MUI_INNERDIALOG_TEXT 1006 "Server"
; setup intal directory
; SERVER_FOLDER_NAME is defined as a folder, but this would basicaly
; result in C:\Program Files\Server
StrCpy $INSTDIR "$PROGRAMFILES\${SERVER_FOLDER_NAME}"
; set the inital value of the directory text box
!insertmacro MUI_INNERDIALOG_TEXT 1019 $INSTDIR
; find and disable the directory selection box
; We do not want users to type in this box
FindWindow $R0 "#32770" "" $HWNDPARENT
GetDlgItem $R1 $R0 1019 ;Text Box
EnableWindow $R1 0
FunctionEnd
Примечание: я могу заставить работать кнопку обзора для одной из страниц каталога, но тогда, когда я на второй странице, автоматически заполняется фактическое, автоматически заполняется неправильно