Tôi đang tạo trình cài đặt bằng NSIS. Trình cài đặt này thực sự cài đặt hai chương trình trong hai thư mục khác nhau trong cùng một trình cài đặt. Tôi đang làm điều này bằng cách sử dụng các trang giao diện người dùng hiện đại (MUI) và chỉ cần gọi MUI_PAGE_DIRECTORY hai lần xác định các tham số bắt đầu khác nhau và chụp thư mục trong macro LEAVE. Những gì tôi tự hỏi là, bằng cách nào đó tôi có thể gọi InstallDir trong một chức năng, hoặc thiết lập giá trị tự động điền vào thư mục trong một chức năng? Hoặc thậm chí có thể gọi một hàm sau khi nút duyệt đã được trả lại từ? Lý do tôi muốn làm điều này là như vậy khi người dùng nhấp vào nút duyệt ở một trong hai trang thư mục, sau khi họ chọn một thư mục, tên của thư mục finnal được chỉ định trong InstallDir sẽ được nối thêm vào.Đặt giá trị của InstallDir trong một hàm, hoặc đặt tự động điền giá trị bằng cách nào đó?
Ví dụ: InstallDir giá trị cho chương trình 1: c: \ client InstallDir giá trị cho chương trình 2: c: \ program files \ server
dùng nhấp duyệt trên chương trình 1 và chọn c: \ temp kết quả đường dẫn c: \ temp \ client
dùng nhấp duyệt trên chương trình 2 và chọn c: \ bất cứ con đường dẫn là c: \ bất cứ điều gì \ server
Để tham khảo ở đây là những snipits mã của những gì tôi có mà hoạt động nhưng không xử lý hành vi tự động thêm nút duyệt qua:
!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
Lưu ý: tôi có thể làm công việc nút duyệt cho một trong những trang thư mục, nhưng sau đó khi tôi đang trên trang thứ hai, tự động cư tự động thực tế populates sai
Vô hiệu hóa nhập văn bản không phải là IMHO mát – Anders