NSIS客戶端打包工具腳本編寫案例?

對於目前遊戲客戶端打包來說安裝文件越來越大,安裝速度也越來越慢。由於前面提到的微軟系統對於打包文件大小的限制問題,做過一些簡單的說明和講解,但是為了方便大家能夠好理解。所以就做了以下NSIS示例出來。希望給那些要用NSIS工具進行打包客戶端的朋友一些提示。

方法/步驟

示例:

; 該腳本使用 HM VNISEdit 腳本編輯器嚮導產生

; 安裝程序初始定義常量!define PRODUCT_NAME "5200免費小說閱讀網"!define PRODUCT_VERSION "版本(X.X.X)"!define PRODUCT_PUBLISHER "仙路爭鋒"!define PRODUCT_WEB_SITE ";!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\XXXX.exe"!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"!define PRODUCT_UNINST_ROOT_KEY "HKLM"

SetCompressor lzmaXPStyle on

; ------ MUI 現代界面定義 (1.67 版本以上兼容) ------!include "MUI.nsh"CRCCheck off

; MUI 預定義常量!define MUI_ABORTWARNING!define MUI_ICON "..\..\安裝包素材\icon.ico"!define MUI_UNICON "..\..\安裝包素材\icon.ico"!define MUI_WELCOMEFINISHPAGE_BITMAP "C:\Documents and Settings\Administrator\桌面\安裝包素材\LOGO112.bmp"!define MUI_WELCOMEPAGE_TITLE "\r\n  XXXX客戶端安裝嚮導"!define MUI_WELCOMEPAGE_TEXT "  《XXX》採用自主開發3D引擎,XXXXXXXXNXXXNXXNXXNXNXNXNXNXNX。\r\n\r\n單擊 下一步 繼續安裝,或單擊 取消 退出安裝程序"

; 歡迎頁面!insertmacro MUI_PAGE_WELCOME; 許可協議頁面!define MUI_LICENSEPAGE_RADIOBUTTONS!insertmacro MUI_PAGE_LICENSE "..\..\安裝包素材\最終用戶許可協議.txt"; 安裝目錄選擇頁面!insertmacro MUI_PAGE_DIRECTORY; 安裝過程頁面!insertmacro MUI_PAGE_INSTFILES; 安裝完成頁面!define MUI_FINISHPAGE_RUN "$INSTDIR\XXXX.exe"!define MUI_FINISHPAGE_RUN_TEXT "運行 《XXXX》登錄器"!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\XXXXX\DXSETUP.exe"!define MUI_FINISHPAGE_SHOWREADME_TEXT "DX9更新程序(請務必安裝,否則可能無法正常遊戲)"!insertmacro MUI_PAGE_FINISH

; 安裝卸載過程頁面!insertmacro MUI_UNPAGE_INSTFILES

; 安裝界面包含的語言設置!insertmacro MUI_LANGUAGE "SimpChinese"

; 安裝預釋放文件!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS; ------ MUI 現代界面定義結束 ------

ReserveFile "${NSISDIR}\Plugins\advsplash.dll"ReserveFile "..\..\安裝包素材\閃圖.bmp"

Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"OutFile "AW_Setup(0.9.2.6).exe"InstallDir "$PROGRAMFILES\XXXX"InstallDirRegKey HKLM "${PRODUCT_UNINST_KEY}" "UninstallString"ShowInstDetails showShowUnInstDetails showBrandingText " XXXX_ONLINE"

Section "test1" SEC01 SetOutPath "$INSTDIR" SetOverwrite ifnewer File /r "G:\XX\XXXX\*.*" CreateDirectory "$SMPROGRAMS\XXXX" CreateShortCut "$SMPROGRAMS\XXXX\XXXX.lnk" "$INSTDIR\XXXX登陸器.exe" CreateShortCut "$DESKTOP\XXXX.lnk" "$INSTDIR\XXXX登陸器.exe"SectionEnd

Section "AW1" SEC02 File /r "G:\XXXX\XXXXXX\*.*"SectionEnd

Section "AW2" SEC03 File /r "G:\XXXX客戶端\Support programs\*.*" /******************************** * vcredist2005_x86靜默安裝支持程序 * ********************************/ ExecWait '"msiexec" /package "$INSTDIR\Support programs\vcredist_x86\vcredist.msi" /qf /quiet' /********************************SectionEnd

Section "AW4" SEC04 File "G:\XXXX\AncientWorld.exe" File "G:\XXXX\XXXXX.dll" File "G:\XXXX\XXXXX.exe" File "G:\XXXX\XXXXX.exe" File "G:\XXXX\XXXXX.exe" File "G:\XXXX\XXXX登陸器.exe" /******************************** * 打開統計頁面 * ********************************/ ExecWait "$INSTDIR\Support programs\Web_URL.bat" /******************************** * 刪除自解壓文件 * ********************************/ Delete "$INSTDIR\XXXXX.exe" Delete "$INSTDIR\XXXXX.exe" Delete "$INSTDIR\XXXXX.exe"SectionEnd

Section -AdditionalIcons WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}" CreateShortCut "$SMPROGRAMS\XXXX\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url" CreateShortCut "$SMPROGRAMS\XXXX\Uninstall.lnk" "$INSTDIR\uninst.exe"SectionEnd

Section -Post WriteUninstaller "$INSTDIR\uninst.exe" WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\AncientWorld.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\XXXXX.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"SectionEnd

#-- 根據 NSIS 腳本編輯規則,所有 Function 區段必須放置在 Section 區段之後編寫,以避免安裝程序出現未可預知的問題。--#

Function .onInit InitPluginsDir File "/oname=$PLUGINSDIR\Splash_閃圖.bmp" "..\..\安裝包素材\閃圖.bmp" ; 使用閃屏插件顯示閃屏 advsplash::show 6000 1800 4200 -1 "$PLUGINSDIR\Splash_閃圖" Pop $0 ; $0 返回 '1' 表示用戶提前關閉閃屏, 返回 '0' 表示閃屏正常結束, 返回 '-1' 表示閃屏顯示出錯FunctionEnd

/****************************** * 以下是安裝程序的卸載部分 * ******************************/

Section Uninstall Delete "$INSTDIR\${PRODUCT_NAME}.url" Delete "$INSTDIR\uninst.exe" Delete "$INSTDIR\XXXXX.exe" Delete "$INSTDIR\XXXXX.exe" Delete "$INSTDIR\XXXXX.exe" Delete "$INSTDIR\XXXXX.exe" Delete "$INSTDIR\XXXXX.dll" Delete "$INSTDIR\XXXXX.exe" Delete "$INSTDIR\*.*"

Delete "$SMPROGRAMS\XXXX\Uninstall.lnk" Delete "$SMPROGRAMS\XXXX\Website.lnk" Delete "$DESKTOP\XXXX.lnk" Delete "$SMPROGRAMS\XXXX\XXXX.lnk"

RMDir "$SMPROGRAMS\XXXX"

RMDir /r "$INSTDIR\vcredist_x86"

RMDir "$INSTDIR"

DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}" SetAutoClose trueSectionEnd

#-- 根據 NSIS 腳本編輯規則,所有 Function 區段必須放置在 Section 區段之後編寫,以避免安裝程序出現未可預知的問題。--#

Function un.onInit MessageBox MB_ICONQUESTION MB_YESNO MB_DEFBUTTON2 "你確實要完全移除 $(^Name) ,及其所有的組件?" IDYES +2 AbortFunctionEnd

Function un.onUninstSuccess HideWindow MessageBox MB_ICONINFORMATION MB_OK "$(^Name) 已成功地從你的計算機移除。"FunctionEnd

按照客戶端的大小目前我測試的打包前的客戶端大小為1.81GB。安裝時間控制在3-4分鐘。其實我靜默安裝的測試文件有3個這裡只出現了1個。所以速度上面來說是夠了。3個靜默安裝的程序文件能夠穩定的安裝成功。這是我測試出來的結果。所以如果大家發現什麼問題請留言。

相關問題答案