; Set default values for variables (Cho biến các giá trị mặc định)
;
StrCpy "$PROGRAMEXE" "${EXE}" ; dùng thiết lập mặc định
StrCpy "$PROGRAMPARMS" ""
StrCpy "$SPLASHSCREEN" "enabled" ; cho phép splashscreen
;
; Kiểm tra cấu hình thư mục nào được dùng và thiết lập các biến theo
đó
;
IfFileExists "$EXEDIR\App\${APP}\$PROGRAMEXE" ""
CheckPortableDIR
StrCpy "$PROGRAMDIR" "$EXEDIR\App\${APP}"
StrCpy "$DATADIR" "$EXEDIR\Data"
Goto InitVarEnd
CheckPortableDIR:
IfFileExists
"$EXEDIR\${PNAME}\App\${APP}\$PROGRAMEXE" ""
CheckPortableAppsDIR
StrCpy "$PROGRAMDIR"
"$EXEDIR\${PNAME}\App\${APP}"
StrCpy "$DATADIR" "$EXEDIR\${PNAME}\Data"
Goto InitVarEnd
CheckPortableAppsDIR:
IfFileExists
"$EXEDIR\PortableApps\${PNAME}\App\${APP}\$PROGRAMEXE" ""
CheckAppsDIR
StrCpy "$PROGRAMDIR"
"$EXEDIR\PortableApps\${PNAME}\App\${APP}"
StrCpy "$DATADIR"
"$EXEDIR\PortableApps\${PNAME}\Data"
Goto InitVarEnd
CheckAppsDIR:
IfFileExists
"$EXEDIR\Apps\${PNAME}\${APP}\$PROGRAMEXE" "" NoDIR
StrCpy "$PROGRAMDIR"
"$EXEDIR\Apps\${PNAME}\${APP}"
StrCpy "$DATADIR" "$EXEDIR\Data\${PNAME}"
Goto InitVarEnd
NoDIR:
;
; Không tìm thấy cấu hình thư mục được cho phép nào
;
MessageBox MB_OK|MB_ICONEXCLAMATION
`$PROGRAMEXE không tìm thấy. Xin kiểm tra cấu hình của bạn`
Abort ; kết thúc launcher
InitVarEnd: ;kết thúc hàm
FunctionEnd
;
******************************************************************
********
; * Hàm: Làm việc với các khóa hoặc cây registry (backup, restore, delete)
;
******************************************************************
********
Function DoAction
StrCmp "$ACTIONPARAMETERS" "" Sau vòng lặp ; nếu không có tham
số nào thì thôi ngay
StrCpy "$R8" "0" ; reset bộ đếm
StrCpy "$R2" "$ACTION" 6 # ; chỉ lấy 6 ký tự đầu của hành động đc yêu
cầu
StrCmp "$R2" "Backup" "" GoOn ; sao lưu thư mục yêu cầu
IfFileExists "$ACTIONDIRECTORY\*.*" GoOn ; tạo thư mục sao lưu nếu
nó không tồn tại
CreateDirectory $ACTIONDIRECTORY
GoOn:
StrCpy "$R0" "$ACTIONPARAMETERS" ; chép hằng số để làm việc đăng
ký
Loop:
;
; Lấy tham số đơn ra khỏi danh sách
;
StrCmp "$R0" "" Sau vòng lặp ; không phân tích registry, khi không
có khóa nào được đưa ra
IntOp $R8 $R8 + 1 ; tăng bộ đếm
${WordFind} "$R0" "||" "+01" $R9 ; lưu tham số đầu tiên để đăng ký
${WordFind} "$R0" "||" "+02*}" $R0 ; xóa phần đầu tiên từ giá trị đã
lưu
StrCmp "$R0" "$R9" LastLoop ; nếu các giá trị đăng ký trùng nhau ->
không còn delimiters
Goto DoWork ; không xóa danh sách giá trị
LastLoop:
StrCpy "$R0" "" ; Nếu không có delimiter sẵn có thì làm trống rỗng
các biến làm việc
;
;Quyết định làm gì với tham số
;
DoWork:
StrCpy "$R2" "$ACTION" "" -4 # ; lấy 7 ký tự cuối của biến hoạt
động
!ifdef REGKEYS
StrCmp "$R2" "Keys" DoWorkRegistry ; hành động phải được
thực hiện với registry
!endif
!ifdef SETTINGSFILES
StrCmp "$R2" "File" DoWorkFiles ; hành động phải được thực
hiện với file
!endif
!ifdef SETTINGSDIRS
StrCmp "$R2" "Dirs" DoWorkDirectory ; hành động phải được
thực hiện với các thư mục
!endif
Goto Continue ; có gì đó không xác định
;
; Thao tác với các khóa registry
;
!ifdef REGKEYS
DoWorkRegistry:
StrCmp "$ACTION" "BackupKeys" BackupRegistryKey
; sao lưu khóa registry
StrCmp "$ACTION" "RestoreKeys" RestoreRegistryKey
; phục hồi khóa registry, VD ghi chúng vào registry
StrCmp "$ACTION" "DeleteKeys" DeleteRegistryKey ;
Xóa các khóa registry
Goto Continue ; có gì đó không xác định
BackupRegistryKey:
${registry::KeyExists} "$R9" $R7 ; kiểm tra khóa
registry có tồn tại hay không
StrCmp "$R7" "0" 0 Continue ; khóa registry không tồn
tại, không lưu lại gì cả
${registry::SaveKey} "$R9"
"$ACTIONDIRECTORY\RegKey$R8.reg" "/G=1" $R7 ; Sao lưu khóa registry
Sleep 50
Goto Continue
RestoreRegistryKey:
IfFileExists "$ACTIONDIRECTORY\RegKey$R8.reg"
0 Continue ; chỉ phục hồi nếu 1 file registry tồn tại
${registry::RestoreKey}
"$ACTIONDIRECTORY\RegKey$R8.reg" $R7 ; Phục hồi các khóa registry đã
lưu
Sleep 50
Goto Continue
DeleteRegistryKey:
${registry::DeleteKey} "$R9" $R7 ; Xóa khóa registry
Sleep 50
Goto Continue
!endif
;
; Thao tác với file
;
!ifdef SETTINGSFILES
DoWorkFiles:
StrCmp "$ACTION" "BackupFile" BackupFile ; thực
hiện sao lưu file
StrCmp "$ACTION" "RestoreFile" RestoreFile ; phục
hồi các file đã lưu, VD ghi nó vào máy host
StrCmp "$ACTION" "DeleteFile" DeleteFile ; xóa file từ
host computer
BackupFile:
IfFileExists "$R9" 0 Continue ; kiểm tra xem file có tồn
tại hay không
CopyFiles "$R9" "$ACTIONDIRECTORY\File$R8.dat"
; sao lưu file
Goto Continue
RestoreFile:
IfFileExists "$ACTIONDIRECTORY\File$R8.dat" 0
Continue ; chỉ phục hồi khi file có sẵn
CopyFiles "$ACTIONDIRECTORY\File$R8.dat" "$R9"
; phục hồi file
Goto Continue
DeleteFile:
Delete "$R9" ; xóa file
Goto Continue
!endif
;
; Thao tác với thư mục
;
!ifdef SETTINGSDIRS
DoWorkDirectory:
StrCmp "$ACTION" "BackupDirs" BackupDirectory ;
sao lưu thư mục
StrCmp "$ACTION" "RestoreDirs" RestoreDirectory ;
phục hồi thư mục đã sao lưu, VD ghi nó vào máy host
StrCmp "$ACTION" "DeleteDirs" DeleteDirectory ; xóa
thư mục từ máy host
BackupDirectory:
IfFileExists "$R9\*.*" 0 Continue ; kiểm tra xem thư
mục nguồn có tồn tại hay không
IfFileExists "$ACTIONDIRECTORY\Dir$R8.dat" +2 0 ;
thư mục đích có tồn tại hay không?
CreateDirectory "$ACTIONDIRECTORY\Dir$R8.dat" ;
tạo thư mục đích
CopyFiles "$R9\*.*"
"$ACTIONDIRECTORY\Dir$R8.dat" ; sao lưu thư mục
Goto Continue
RestoreDirectory:
IfFileExists "$ACTIONDIRECTORY\Dir$R8.dat\*.*" 0
Continue ; kiểm tra xem các sao lưu có tồn tại không
IfFileExists "$R9\*.*" +2 0 ; thư mục đích có tồn tại
không
CreateDirectory "$R9" ; create target directory
CopyFiles "$ACTIONDIRECTORY\Dir$R8.dat\*.*"
"$R9" ; phục hồi các thư mục
Goto Continue
DeleteDirectory:
RMDir "/r" "$R9" ; xóa thư mục
Goto Continue
!endif
;
; End of Loop