; ****************************************************************** ******** ; ****************************************************************** ******** ; * Định nghĩa các hằng số (Define constants) ; ****************************************************************** ******** !define AUTHOR "" ; tên bạn !define APP "" ; chèn tên ứng dụng, Ví dụ "TestApp" !define VER "0.0.0.0" ; chèn phiên bản của chương trình !define EXE "" ; chèn tên file EXE, Ví dụ "testapp.exe" !define PNAME "${App}Portable" ; định dạng tên portable (các thư mục và tên file) !define ICON "${PNAME}.ico" ; chú thích dòng này khi sử dụng icon mặc định !define SPLASHIMAGE "${PNAME}.jpg" ; chú thích dòng này khi không dùng ảnh splashscreen !define REGKEYS "" ; chèn các khóa registry sử dụng, phân cách bởi "||", chú thích khi không dùng !define SETTINGSFILES "" ; chèn các file thiết lập dùng đến, phân cách bởi "||" được lưu trữ trong máy host, Ví dụ "$WINDIR\TEST.INI", chú thích ra khi không dùng !define SETTINGSDIRS "" ; chèn các thư mục thiết lập dùng đến, phân cách bởi "||" được lưu trữ trong máy host, Ví dụ "$PROFILE\TEST", chú thích ra khi không dùng !define INI "${PNAME}.ini" ; có thể thay đổi khi thiết lập của nhiều chương trình được lưu trong 1 file .INI ; ****************************************************************** ******** ; * Includes (Bao gồm) ; ****************************************************************** ******** !include "Registry.nsh" ; thêm các macro thao tác registry, không được bao gồm mặc định trong NSIS !include "WordFunc.nsh" ; thêm header cho thao tác với word !insertmacro "WordFind" ; thêm chức năng chia tách chuỗi !include "FileFunc.nsh" ; thêm header cho thao tác với file !insertmacro "GetParameters" ; thêm chức năng tìm lại các tham số dòng lệnh ; ****************************************************************** ******** ; * Runtime Switches (chuyển đổi thời gian thực) ; ****************************************************************** ******** CRCCheck On ; tiến hành CRC (cycle redundancy check) check của launcher trước khi bắt đầu("Off" cho việc nén EXE sau này) WindowIcon Off ; không hiển thị icon của launcher SilentInstall Silent ; bắt đầu như launcher, không phải installer AutoCloseWindow True ; tự động đóng khi kết thúc ; ****************************************************************** ******** ; * Định nghĩa các biến (Define variables) ; ****************************************************************** ******** Var ACTION Var ACTIONDIRECTORY Var ACTIONPARAMETERS Var SPLASHSCREEN ; thông tin splash screen có được hiện ra không, mặc định là có Var PROGRAMEXE ; tên của file EXE cần chạy Var PROGRAMDIR ; đường dẫn của file EXE ở trên Var PROGRAMPARMS ; các tham số thêm vào khi chạy file EXE Var DATADIR ; đường dẫn tới thư mục nơi lưu tất cả các thiết lập Var INIFILE ; đường dẫn đầy đủ tới file INI tìm được Var SECONDLAUNCH ; file EXE có được chạy lần thứ 2 hay không ; ****************************************************************** ******** ; * Set basic information ( thiết lập các thông tin cơ bản) ; ****************************************************************** ******** Name "${APP} Portable" !ifdef ICON Icon "${ICON}" !endif Caption "${APP} Portable - ${VER}" OutFile "${PNAME}.exe" ; ****************************************************************** ******** ; * Set version information (Thiết lập thông tin phiên bản) ; ****************************************************************** ******** LoadLanguageFile "${NSISDIR}\Contrib\Language files\English.nlf" VIProductVersion "${Ver}" VIAddVersionKey /LANG=${LANG_ENGLISH} "Tên sản phẩm" "${APP} Portable" VIAddVersionKey /LANG=${LANG_ENGLISH} "Chú thích" "Cho phép ${APP} chạy trên 1 ổ cứng lưu động." VIAddVersionKey /LANG=${LANG_ENGLISH} "Bản quyền hợp pháp" "© ${AUTHOR}" VIAddVersionKey /LANG=${LANG_ENGLISH} "Tên công ty" "by ${AUTHOR}" VIAddVersionKey /LANG=${LANG_ENGLISH} "Mô tả file" "${APP} Portable" VIAddVersionKey /LANG=${LANG_ENGLISH} "Phiên bản của file" "${VER}" VIAddVersionKey /LANG=${LANG_ENGLISH} "Tên file gốc" "${PNAME}.exe" ; ****************************************************************** ******** ; * Hàm: Các khởi chạy khác trước khi chạy chương trình ; ****************************************************************** ******** Function Init FunctionEnd ; ****************************************************************** ******** ; * Hàm: Các thứ cần dọn sạch trước khi kết thúc chương trình ; ****************************************************************** ******** Function CleanUp FunctionEnd ; ****************************************************************** ******** ; * Function: Initialize working variables (Hàm chạy các biến làm việc) ; ****************************************************************** ******** Function InitVariables ; ; Kiểm tra xem file INI có tồn tại không, thiết lập biến trỏ đến nó ; IfFileExists "$EXEDIR\${INI}" "" CheckPortableINI StrCpy "$INIFILE" "$EXEDIR\${INI}" Goto ReadINIFile CheckPortableINI: IfFileExists "$EXEDIR\${PNAME}\${INI}" "" CheckPortableAppsINI StrCpy "$INIFILE" "$EXEDIR\${PNAME}\${INI}" Goto ReadINIFile CheckPortableAppsINI: IfFileExists "$EXEDIR\PortableApps\${PNAME}\${INI}" "" CheckAppsINI StrCpy "$INIFILE" "$EXEDIR\PortableApps\${PNAME}\${INI}" Goto ReadINIFile CheckAppsINI: IfFileExists "$EXEDIR\Apps\${PNAME}\${INI}" "" CheckDataINI StrCpy "$INIFILE" "$EXEDIR\Apps\${PNAME}\${INI}" Goto ReadINIFile CheckDataINI: IfFileExists "$EXEDIR\Data\${PNAME}\${INI}" "" NoINIFile StrCpy "$INIFILE" "$EXEDIR\Data\${PNAME}\${INI}" Goto ReadINIFile Goto NoINIFile ; ; Read content of the INI file (Đọc nội dung file INI) ; ReadINIFile: ReadINIStr $0 "$INIFILE" "${PNAME}" "Thư mục chương trình" StrCmp $0 "" NoINIFile ; nếu trống rỗng lấy lại thiết lập đúng StrCpy "$PROGRAMDIR" "$EXEDIR\$0" ; lưu thư mục chương trình ReadINIStr $0 "$INIFILE" "${PNAME}" "Thư mục dữ liệu" StrCmp $0 "" NoINIFile ; nếu trống rỗng lấy lại thiết lập đúng StrCpy "$DATADIR" "$EXEDIR\$0" ; lưu thư mục dữ liệu ReadINIStr $0 "$INIFILE" "${PNAME}" "file .EXE của chương trình" StrCpy "$PROGRAMEXE" "$0" ; lưu tên file .exe StrCmp $0 "" "" Splash ; nếu trống rỗng dùng tên mặc định StrCpy "$PROGRAMEXE" "${EXE}" ; cho giá trị mặc định Splash: ReadINIStr $0 "$INIFILE" "${PNAME}" "SplashScreen" StrCpy "$SPLASHSCREEN" "$0" ; lưu trạng thái của màn hình Splashscreen StrCmp "$SPLASHSCREEN" "" "" Các tham số chương trình ; kiểm tra xem biết splashscreen có trống rỗng không StrCpy "$SPLASHSCREEN" "enabled" ; cho giá trị mặc định ProgramParameters: ReadINIStr $0 "$INIFILE" "${PNAME}" "Tham số chương trình" StrCpy "$PROGRAMPARMS" "$0" ; lưu các tham số bổ sung Goto InitVarEnd ; kết thúc việc đọc file INI NoINIFile: ; thiết lập mặc định cho tất cả các biến ; . filesEnglish.nlf" VIProductVersion "$ {Ver} " VIAddVersionKey /LANG=${LANG_ENGLISH} "Tên sản phẩm" "${APP} Portable" VIAddVersionKey /LANG=${LANG_ENGLISH}. VIAddVersionKey /LANG=${LANG_ENGLISH} "Mô tả file" "${APP} Portable" VIAddVersionKey /LANG=${LANG_ENGLISH} "Phiên bản của file" "$ {VER} " VIAddVersionKey. "" CheckAppsINI StrCpy "$INIFILE" "$EXEDIRPortableApps${PNAME}${INI}" Goto ReadINIFile CheckAppsINI: IfFileExists "$EXEDIRApps${PNAME}${INI}"