;
******************************************************************
********
;
******************************************************************
********
; * Đị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
;