1. Trang chủ
  2. » Công Nghệ Thông Tin

Công thức để tạo một chương trình portable màu làm bằng NSIS pdf

16 417 2
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 16
Dung lượng 107,95 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

có thể đọc trong file readme.txt.. ; ; Lưu ý: Khi sao lưu những thư mục và file có sẵn, có thể mất rất nhiều thời gian ; tùy thuộc vào tốc độ ổ cứng USB của bạn.. Function InitVariables

Trang 1

;

***********************************************************

***************

; Tên: Portable

;

; Phiên bản:

;

; Website:

;

; Được viết cho:

; NSIS 2.17 hoặc cao hơn

; Các plugin cần thiết: NewAdvSplash, Registry, FindProcDLL, Messagebox

;

; Giấy phép:

; Copyright© 2006 by

;

; Những thông tin về cài đặt, cấu trúc thư mục v.v có thể đọc trong file readme.txt

;

; Lưu ý: Khi sao lưu những thư mục và file có sẵn, có thể mất rất nhiều thời gian

; tùy thuộc vào tốc độ ổ cứng USB của bạn Nhớ lấy điều này!

; Cửa sổ trạng thái cho thấy việc sao chép được cho phép

;

; Mẫu ứng dụng portable được tạo vào năm 2006 bởi Karl Loncarek, phiên bản 1.4.1 - 2006/11/30

; Giấy phép của mẫu này xem ở file readme.txt

;

***********************************************************

***************

;

***********************************************************

***************

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

Trang 2

!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

Trang 3

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"

Trang 4

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)

;

***********************************************************

***************

Trang 5

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"

Trang 6

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

; -

; 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 đó

; -

Trang 7

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

Trang 8

;

***********************************************************

***************

; * 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ố

Trang 9

; -

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:

Trang 10

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

Trang 11

!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

Ngày đăng: 29/07/2014, 03:20

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w