• nsis制作启动Tomcat服务的exe安装包教程


    一. 准备工作

      下载nsis相关工具包,点击此下载

        1. 安装程序:nsis-2.46-setup.exe

        2. 编辑程序:cnisedit203.exe

        3. 帮助文档:NSIS205帮助文档.rar

        4. 第三方库:ExecCmd.dll、AddPath.nsh、WriteEnvStr.nsh

    二. 安装nsis-2.4.6-setup.exe

      1. 安装完后,右键nsi格式的文件,如果没有出现Compile NSIS Script和Compile NSIS Script(Choose Compressor)两个选项,

      可尝试右键nsi格式文件---属性---常规---更改打开方式为记事本。

       2. 将ExecCmd.dll复制到"NSIS安装路径Plugins"下

      

    三. 制作nsi打包脚本:ims1.0.0-jdk1.6.0_21&tomcat6.0.33.nsi

    ; Script generated by the HM NIS Edit Script Wizard.
    
    
    ;------------------------------常量定义-------------------------------
    
    ;定义产品名称常量
    !define PRODUCT_NAME "企业信息管理系统"
    
    ;定义产品版本常量
    !define PRODUCT_VERSION "1.0.0"
    
    ;定义发布公司名称常量
    !define PRODUCT_PUBLISHER "ims"
    
    ;定义产品发布公司网址常量
    !define PRODUCT_WEB_SITE "http://www.ims.com"
    
    ;定义反安装键值常量
    !define PRODUCT_UNINST_KEY "SoftwareMicrosoftWindowsCurrentVersionUninstall${PRODUCT_NAME}"
    
    ;定义反安装ROOT键值常量
    !define PRODUCT_UNINST_ROOT_KEY "HKLM"
    
    ;定义开机自动启动ROOT键值常量
    !define PRODUCT_AUTORUN_ROOT_KEY "HKCU"
    
    ;定义开机自动启动键值常量
    !define PRODUCT_AUTORUN_KEY "SoftwareMicrosoftWindowsCurrentVersionRun"
    
    ;定义系统访问地址
    !define URL "http://localhost:8080/ims/index.html"
    
    ;应用路径常量
    !define APP_CATALOG "app"
    
    ;资源路径常量
    !define RESOURCE_CATALOG "resource"
    
    ;目标路径常量
    !define TARGET_CATALOG "target"
    
    ;定义JDK资源存放路径常量
    !define JDK_RESOURCE_CATALOG "javajdk1.6.0_21"
    
    ;定义TOMCAT的资源存放路径常量
    !define TOMCAT_RESOURCE_CATALOG "containerapache-tomcat-6.0.33"
    
    ;定义MYSQL的资源存放路径常量
    !define MYSQL_RESOURCE_CATALOG "dbmysql-server-5.1"
    
    ;定义数据存放路径常量
    !define DATA_RESOURCE_CATALOG "data"
    
    ;定义图标存放路径常量
    !define ICON_RESOURCE_CATALOG "icon"
    
    ;定义JAVA_HOME常量常量
    !define JAVA_HOME "$INSTDIR${JDK_RESOURCE_CATALOG}"
    
    ;定义CATALINA_HOME常量常量
    !define CATALINA_HOME "$INSTDIR${TOMCAT_RESOURCE_CATALOG}"
    
    ;定义MYSQL_HOME常量常量
    !define MYSQL_HOME "$INSTDIR${MYSQL_RESOURCE_CATALOG}"
    
    
    
    
    ;------------------------------第三方库导入-------------------------------
    
    ; MUI 1.67 compatible ------
    !include "MUI.nsh"
    
    ;导入打包程序第三方库
    !include "thirdAddPath.nsh"
    !include "thirdWriteEnvStr.nsh"
    
    
    ;------------------------------图标定义-------------------------------
    
    ; MUI Settings
    !define MUI_ABORTWARNING
    !define MUI_ICON "${NSISDIR}ContribGraphicsIconsorange-install.ico"
    !define MUI_UNICON "${NSISDIR}ContribGraphicsIconsorange-uninstall.ico"
    
    
    
    
    ;------------------------------安装步骤向导界面定义-------------------------------
    
    ;欢迎页面
    !insertmacro MUI_PAGE_WELCOME
    
    ;授权页面
    !insertmacro MUI_PAGE_LICENSE "..${RESOURCE_CATALOG}licence.txt"
    
    ;目录选择页面
    !insertmacro MUI_PAGE_DIRECTORY
    
    ;安装页面
    !insertmacro MUI_PAGE_INSTFILES
    
    ;完成页面
    !insertmacro MUI_PAGE_FINISH
    
    ;反安装页面
    !insertmacro MUI_UNPAGE_INSTFILES
    
    ;语言选择
    !insertmacro MUI_LANGUAGE "SimpChinese"
    
    
    
    
    ;------------------------------打包后安装文件名/输出路径/安装路径定义-------------------------------
    
    ;产品名称及产品版本
    Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
    
    ;输出文件名称
    OutFile "..${TARGET_CATALOG}${PRODUCT_NAME}-${PRODUCT_VERSION}.exe"
    
    ;程序安装路径
    InstallDir "$PROGRAMFILESims1.0.0"
    
    ;显示安装进度
    ShowInstDetails show
    
    ;显示反安装进度
    ShowUnInstDetails show
    
    
    
    ;------------------------------提示对话框定义-------------------------------
    
    ;安装前提示
    Function .onInit
       MessageBox MB_YESNO "请先确认该电脑上没有安装JDK、Apache Tomcat、Mysql软件。是否继续?" IDYES NoAbort
         Abort
       NoAbort:
    FunctionEnd
    
    ;安装失败提示
    Function .onInstFailed
        MessageBox MB_OK "安装失败,请检查您的系统环境。"
    FunctionEnd
    
    ;反安装成功提示
    Function un.onUninstSuccess
      HideWindow
      MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从您的计算机移除。"
    FunctionEnd
    
    ;反安装提示
    Function un.onInit
      MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "您确实要完全移除 $(^Name) ,其及所有的组件?" IDYES +2
      Abort
    FunctionEnd
    
    
    
    ;------------------------------菜单以及注册表信息注册-------------------------------
    
    ;菜单注册
    Section -AdditionalIcons
      SetOutPath $INSTDIR
      ;WriteIniStr "$INSTDIR${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
      CreateDirectory "$SMPROGRAMS${PRODUCT_NAME}"
      CreateShortCut "$SMPROGRAMS${PRODUCT_NAME}${PRODUCT_NAME}.lnk" "${URL}"
      CreateShortCut "$SMPROGRAMS${PRODUCT_NAME}Uninstall.lnk" "$INSTDIRuninst.exe"
      ;CreateShortCut "$DESKTOP${PRODUCT_NAME}.lnk" "${URL}" "" "$INSTDIRiconims.ico"
    SectionEnd
    
    
    ;注册表注册
    Section -Post
      WriteRegStr ${PRODUCT_AUTORUN_ROOT_KEY} "${PRODUCT_AUTORUN_KEY}" "${PRODUCT_NAME}" "${CATALINA_HOME}in
    unbat.vbs"
      WriteUninstaller "$INSTDIRuninst.exe"
      WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
      WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIRuninst.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
    
    
    
    
    ;------------------------------资源复制打包-------------------------------
    
    ;将JDK_RESOURCE_CATALOG下的所有文件资源拷贝至安装目录下
    Section "JDK_RESOURCE_COPY" SEC01
      sectionin 1
      sectionin RO
      SetOutPath "$INSTDIR${JDK_RESOURCE_CATALOG}"
      SetOverwrite try
      File /r "..${RESOURCE_CATALOG}${JDK_RESOURCE_CATALOG}*.*"
    SectionEnd
    
    
    ;将TOMCAT_RESOURCE_CATALOG下的所有文件资源拷贝至安装目录下
    Section "TOMCAT_RESOURCE_COPY" SEC02
      sectionin 1
      sectionin RO
      SetOutPath "$INSTDIR${TOMCAT_RESOURCE_CATALOG}"
      SetOverwrite try
      File /r "..${RESOURCE_CATALOG}${TOMCAT_RESOURCE_CATALOG}*.*"
    SectionEnd
    
    
    ;将MYSQL_RESOURCE_CATALOG下的所有文件资源拷贝至安装目录下
    Section "MYSQL_RESOURCE_COPY" SEC03
      sectionin 1
      sectionin RO
      SetOutPath "$INSTDIR${MYSQL_RESOURCE_CATALOG}"
      SetOverwrite try
      File /r "..${RESOURCE_CATALOG}${MYSQL_RESOURCE_CATALOG}*.*"
    
      ;设置初始化SQL文件路径
      WriteINIStr "${MYSQL_HOME}my.ini" mysqld "init-file" '"${MYSQL_HOME}init.sql"'
      WriteINIStr "${MYSQL_HOME}my.ini" mysqld "basedir" '"${MYSQL_HOME}"'
      WriteINIStr "${MYSQL_HOME}my.ini" mysqld "datadir" '"$INSTDIR${DATA_RESOURCE_CATALOG}mysql"'
      FlushINI "${MYSQL_HOME}my.ini"
    SectionEnd
    
    
    ;将DATA_RESOURCE_COPY下的所有文件资源拷贝至安装目录下
    Section "DATA_RESOURCE_COPY" SEC04
      sectionin 1
      sectionin RO
      SetOutPath "$INSTDIR${DATA_RESOURCE_CATALOG}"
      SetOverwrite try
      File /r "..${DATA_RESOURCE_CATALOG}*.*"
    SectionEnd
    
    
    ;将ICON_RESOURCE_COPY下的所有文件资源拷贝至安装目录下
    Section "ICON_RESOURCE_COPY" SEC06
      sectionin 1
      sectionin RO
      SetOutPath "$INSTDIR${ICON_RESOURCE_CATALOG}"
      SetOverwrite try
      File /r "..${RESOURCE_CATALOG}${ICON_RESOURCE_CATALOG}*.*"
      CreateShortCut "$DESKTOP${PRODUCT_NAME}.lnk" "${URL}" "" "$INSTDIRiconims.ico"
    SectionEnd
    
    
    ;将APP_RESOURCE_COPY下的所有文件资源拷贝至安装目录下
    Section "APP_RESOURCE_COPY" SEC07
      sectionin 1
      sectionin RO
      SetOutPath "$INSTDIR${TOMCAT_RESOURCE_CATALOG}webapps"
      SetOverwrite try
      File /r "..${APP_CATALOG}*.*"
    SectionEnd
    
    
    
    ;------------------------------环境变量注册及反注册-------------------------------
    
    ;注册环境变量
    Section -EnvironmentVariables
      ;JDK安装根路径
      Push JAVA_HOME
      Push '${JAVA_HOME}'
      Call WriteEnvStr
      Push '${JAVA_HOME}bin'
      Call AddToPath
      
      ;TOMCAT安装根路径
      Push CATALINA_HOME
      Push '${CATALINA_HOME}'
      Call WriteEnvStr
      Push '${CATALINA_HOME}bin'
      Call AddToPath
      
      ;MySQL安装根路径
      Push MYSQL_HOME
      Push '${MYSQL_HOME}'
      Call WriteEnvStr
      Push '${MYSQL_HOME}bin'
      Call AddToPath
    SectionEnd
    
    
    
    ;反注册环境变量
    Function un.removeEnvPath
      Push JAVA_HOME
      Call un.DeleteEnvStr
      Push '${JAVA_HOME}bin'
      Call un.RemoveFromPath
    
      Push CATALINA_HOME
      Call un.DeleteEnvStr
      Push '${CATALINA_HOME}bin'
      Call un.RemoveFromPath
    
      Push MYSQL_HOME
      Call un.DeleteEnvStr
      Push '${MYSQL_HOME}bin'
      Call un.RemoveFromPath
    FunctionEnd
    
    
    
    
    ;------------------------------服务的安装/启动/停止/反安装-------------------------------
    
    ;安装并启动后台服务
    Section -Service
      Call InstallMySQLService
      Call InstallTomcatService
      
      Call startMySQLService
      Call startTomcatProcess
    SectionEnd
    
    
    
    ;安装TOMCAT服务
    Function InstallTomcatService
      SetOutPath "$INSTDIR${TOMCAT_RESOURCE_CATALOG}in"
      ExecCmd::exec /TIMEOUT=10000 "service.bat install"
    FunctionEnd
    
    ;安装MYSQL服务
    Function InstallMySQLService
      ExecWait "$INSTDIR${MYSQL_RESOURCE_CATALOG}inmysqld -install"
    FunctionEnd
    
    
    
    
    ;启动TOMCAT进程
    Function startTomcatProcess
      SetOutPath "${CATALINA_HOME}in"
      nsExec::Exec /TIMEOUT=120000 '"$SYSDIRcscript.exe" "${CATALINA_HOME}in
    unbat.vbs"'
    FunctionEnd
    
    ;启动MySQL服务
    Function startMySQLService
      ExecCmd::exec /TIMEOUT=60000 "net start MySQL"
      Sleep 1500
      SetOutPath "$INSTDIR${MYSQL_RESOURCE_CATALOG}in"
      Sleep 1500
      ExecCmd::exec /TIMEOUT=60000 "mysql.exe -uroot -p123456 <ims.sql"
    FunctionEnd
    
    
    
    
    ;停止TOMCAT服务
    Function un.stopTomcatService
      ExecCmd::exec /TIMEOUT=120000 "net stop Tomcat6"
    FunctionEnd
    
    ;停止MySQL服务
    Function un.stopMySQLService
      ExecCmd::exec /TIMEOUT=20000 "net stop MySQL"
    FunctionEnd
    
    
    
    
    ;删除TOMCAT服务
    function un.removeTomcatService
      SetOutPath "$INSTDIR${TOMCAT_RESOURCE_CATALOG}in"
      ExecCmd::exec /TIMEOUT=120000 "service.bat remove"
    functionend
    
    ;删除MySQL服务
    function un.removeMySQLService
      ExecWait "$INSTDIR${MYSQL_RESOURCE_CATALOG}inmysqld -remove"
    functionend
    
    ;------------------------------反安装-------------------------------
    
    Section Uninstall
      ExecCmd::exec /TIMEOUT=120000 "taskkill /im tomcat6.exe /f"
    
      Call un.stopTomcatService 
      Call un.stopMySQLService   
      
      Call un.removeTomcatService  
      Call un.removeMySQLService   
      
      Delete "$DESKTOP${PRODUCT_NAME}.lnk"
      Delete "$SMPROGRAMS${PRODUCT_NAME}Uninstall.lnk"
      Delete "$SMPROGRAMS${PRODUCT_NAME}${PRODUCT_NAME}.lnk"
      RMDir "$SMPROGRAMS${PRODUCT_NAME}"
    
      Delete "$INSTDIR${PRODUCT_NAME}.url"
      Delete "$INSTDIRuninst.exe"
      RMDir /r "$INSTDIR"
    
      DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
      DeleteRegValue ${PRODUCT_AUTORUN_ROOT_KEY} "${PRODUCT_AUTORUN_KEY}" "${PRODUCT_NAME}"
      
      Call un.removeEnvPath
      SetAutoClose true
    SectionEnd
    View Code


    四. 编译前准备

      1. 新建resource、target、script三个文件夹

      2. 将jdk1.6.0_21、tomcat6.0.33放置到resource文件夹下

      3. 创建licence.txt文件,放置到resource文件夹下

      4. 将ims1.0.0-jdk1.6.0_21&tomcat6.0.33.nsi放置到script文件夹下

      5. 在script下新建third文件夹,将AddPath.nsh、WriteEnvStr.nsh放置到该文件夹下

       

    五. 编译nsi脚本

      右键nsi脚本,选择Compile NSIS Script进行编译,最终在target目录下生成exe安装包。

  • 相关阅读:
    Java参数传递方式
    C++成员函数的 重载、隐藏、覆盖分析(转)
    回调函数 (一)
    Java之String 专题二
    从10亿个浮点数中找出最大的1万个
    【onclick事件】【改变 HTML 内容innerHTML】【图片替换】【改变标签的css】【判断输入是否是数字】
    【页面加载】【九九乘法表】【document.write的功能_】【<script>直接显示数组】【声明新变量】
    Windows10 环境下安装 ElasticSearch
    数据包和数据报有何区别?
    NIO 通道和缓冲区
  • 原文地址:https://www.cnblogs.com/Mr-kevin/p/5580674.html
Copyright © 2020-2023  润新知