对于目前游戏客户端打包来说安装文件越来越大,安装速度也越来越慢。由于前面提到的微软系统对于打包文件大小的限制问题,做过一些简单的说明和讲解,但是为了方便大家能够好理解。所以就做了以下NSIS示例出来。希望给那些要用NSIS工具进行打包客户端的朋友一些提示。
废话不多说,直接上示例。有不明白的地方可以留言,我看到尽量为大家解答。
示例:
; 该脚本使用 HM VNISEdit 脚本编辑器向导产生
; 安装程序初始定义常量
!define PRODUCT_NAME "XXXX客户端"
!define PRODUCT_VERSION "版本(X.X.X)"
!define PRODUCT_PUBLISHER "蜀山大师兄有限公司"
!define PRODUCT_WEB_SITE "http://www.蜀山.com"
!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 lzma
XPStyle 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 show
ShowUnInstDetails show
BrandingText " 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 true
SectionEnd
#-- 根据 NSIS 脚本编辑规则,所有 Function 区段必须放置在 Section 区段之后编写,以避免安装程序出现未可预知的问题。--#
Function un.onInit
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "你确实要完全移除 $(^Name) ,及其所有的组件?" IDYES +2
Abort
FunctionEnd
Function un.onUninstSuccess
HideWindow
MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从你的计算机移除。"
FunctionEnd
按照客户端的大小目前我测试的打包前的客户端大小为1.81GB。安装时间控制在3-4分钟。其实我静默安装的测试文件有3个这里只出现了1个。所以速度上面来说是够了。3个静默安装的程序文件能够稳定的安装成功。这是我测试出来的结果。所以如果大家发现什么问题请留言。