nsis打包过程
nsis脚本一般流程:
1.设置权限,相关常量。
2.预安装、安装、安装后信息
3.on卸载、卸载、卸载后信息
例子:
; 该脚本使用 HM VNISEdit 脚本编辑器向导产生 ; 安装程序初始定义常量 !define PRODUCT_NAME "XXXXX信息系统离线录入软件" !define PRODUCT_VERSION "1.0" !define PRODUCT_PUBLISHER "西安XXXXX信息股份有限公司" !define PRODUCT_WEB_SITE "http://www.ourfuture.com.cn" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "HKLM" ; 提升权限 RequestExecutionLevel admin SetCompressor lzma ; ------ MUI 现代界面定义 (1.67 版本以上兼容) ------ !include "MUI.nsh" ; MUI 预定义常量 !define MUI_ABORTWARNING !define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico" !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" ; 欢迎页面 !insertmacro MUI_PAGE_WELCOME ; 许可协议页面 !insertmacro MUI_PAGE_LICENSE "C:\Users\Administrator\Desktop\test.txt" ; 安装目录选择页面 !insertmacro MUI_PAGE_DIRECTORY ; 安装过程页面 !insertmacro MUI_PAGE_INSTFILES ; 安装完成页面 !define MUI_FINISHPAGE_RUN "$INSTDIR\pis\pis.exe" !insertmacro MUI_PAGE_FINISH ; 安装卸载过程页面 !insertmacro MUI_UNPAGE_INSTFILES ; 安装界面包含的语言设置 !insertmacro MUI_LANGUAGE "SimpChinese" ; 安装预释放文件 !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS ; ------ MUI 现代界面定义结束 ------ Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "Setup.exe" ;InstallDir "$PROGRAMFILES\${PRODUCT_NAME}" InstallDir "D:\${PRODUCT_NAME}" CRCCheck on ShowInstDetails show ShowUnInstDetails show BrandingText "西安XXXX信息股份有限公司" !macro VerifyUserIsAdmin UserInfo::GetAccountType Pop $0 ${If} $0 != "admin" MessageBox MB_ICONSTOP "必须管理员权限" setErrorLevel 740 ${EndIf} !macroend Function .onInit SetShellVarContext all !insertmacro VerifyUserIsAdmin FunctionEnd Section "mysql" SEC01 AddSize 500000 SetOutPath "$INSTDIR\mysql" SetOverwrite ifnewer ; 要导入的文件路径 File /r "F:\离线\mysql-5.1.6-alpha-win32\*.*" SectionEnd Section "pis" SEC02 AddSize 400000 ; 要导入的文件路径 SetOutPath "$INSTDIR\" SetOverwrite ifnewer File /r "C:\Users\Administrator\Desktop\t1\*.*" SectionEnd Section -AdditionalIcons SetOutPath $INSTDIR WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}" CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}" CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url" CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" "$INSTDIR\uninst.exe" CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\pis\pis.exe" SectionEnd Section -Post ; ------- Mysql安装 ;nsExec::ExecToLog 'cmd.exe cd "$INSTDIR"' ;nsExec::ExecToLog 'cmd.exe /c "mysql\install.bat"' ;nsExec::ExecWaitToLog 'cmd.exe /c "bin\mysqld.exe --install mysql --defaults-file=$INSTDIR\mysql\my-small.ini""' ExecWait "$INSTDIR\mysql\bin\mysqld.exe --install mysql --defaults-file=$INSTDIR\mysql\my-small.ini" ExecWait "net start mysql" WriteUninstaller "$INSTDIR\uninst.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}" "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 /****************************** * 以下是安装程序的卸载部分 * ******************************/ Section Uninstall ; ------- Mysql ;nsExec::ExecToLog 'cmd.exe cd "$INSTDIR\mysql\bin\"' ;nsExec::ExecToLog 'cmd.exe /c "mysql\uninstall.bat"' ExecWait "net stop mysql" ExecWait "$INSTDIR\mysql\bin\mysqld.exe -remove mysql" Delete "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" Delete "$SMPROGRAMS\${PRODUCT_NAME}\Website.lnk" Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" RMDir "$SMPROGRAMS\${PRODUCT_NAME}" Delete "$INSTDIR\${PRODUCT_NAME}.url" Delete "$INSTDIR\uninst.exe" RMDir /r "$INSTDIR\pis" RMDir /r "$INSTDIR\mysql" RMDir "$INSTDIR" DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" SetAutoClose false SectionEnd #-- 根据 NSIS 脚本编辑规则,所有 Function 区段必须放置在 Section 区段之后编写,以避免安装程序出现未可预知的问题。--# Function un.onInit SetShellVarContext all MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "您确实要完全移除 $(^Name) ,及其所有的组件?" IDYES +2 Abort !insertmacro VerifyUserIsAdmin FunctionEnd Function un.onUninstSuccess HideWindow MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从您的计算机移除。" FunctionEnd