您的位置:首页 > 运维架构 > Tomcat

nsis打包tomcat,jdk,javaweb

2015-06-19 17:30 603 查看
这段时间一直在做一个关于javaweb打包成exe文件。这里面涉及到tomcat的注册成服务,并且将服务设为自动启动的方式,
首先要确保tomcat的bin目录下有service.bat文件,这个文件里有许多关于处理tomacat的命令,
首先用编辑器打开service.bat文件,然后在里面修改一下jvm的最大最小内存,然后在
goto end
:installed
后面加上
sc config %SERVICE_NAME%= auto
net start %SERVICE_NAME%
这里的%SERVICE_NAME%是指执行service.bat install [servicename]中的servciename,
然后打开cmd窗口,cd "你安装到的tomcat下的bin目录"
然后执行service.bat install [servicename] 即可

如果是想要在没有jre的环境下的windows中安装,则需要布置JAVA_HOME或者是JRE_HOME,但是有一点需要注意的是在配置过环境变量以后如果卸载的时候是需要将tomcat的环境变量和java的环境变量置为空的。
在这里附上我的代码,写的不好的地方还请指正:
; 该脚本使用 HM VNISEdit 脚本编辑器向导产生

; 安装程序初始定义常量

!define PRODUCT_NAME "测试打包系统"

!define PRODUCT_VERSION "1.0"

!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_NAME}.exe"

!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"

!define PRODUCT_UNINST_ROOT_KEY "HKLM"

!define PRODUCT_STARTMENU_REGVAL "NSIS:StartMenuDir"

; 定义系统环境变量的注册表key值,用于向环境变量CATALINA_HOME里写入安装目录,锁定tomcat

!define WriteEnvStr_RegKey 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"'

SetCompressor lzma

; MUI 1.67 compatible ------

!include "MUI.nsh"

;定义注册表主键,用于判断服务器是否已安装JDK,有继续安装,无退出安装,(必须带上LogicLib.nsh)

!define HKEY_LOCAL_MACHINE 0x80000002

!include LogicLib.nsh

; MUI Settings

!define MUI_ABORTWARNING

!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\orange-install.ico"

!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\orange-uninstall.ico"

; 欢迎页面

!insertmacro MUI_PAGE_WELCOME

; 安装目录选择页面

!insertmacro MUI_PAGE_DIRECTORY

; 开始菜单设置页面

var ICONS_GROUP

!define MUI_STARTMENUPAGE_NODISABLE

!define MUI_STARTMENUPAGE_DEFAULTFOLDER "测试系统"

!define MUI_STARTMENUPAGE_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"

!define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"

!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${PRODUCT_STARTMENU_REGVAL}"

!insertmacro MUI_PAGE_STARTMENU Application $ICONS_GROUP

; Instfiles page

!insertmacro MUI_PAGE_INSTFILES

; Finish page

;!define MUI_FINISHPAGE_RUN "$INSTDIR\tomcat6\bin\startup.bat"

!insertmacro MUI_PAGE_FINISH

; Uninstaller pages

!insertmacro MUI_UNPAGE_INSTFILES

; Language files

!insertmacro MUI_LANGUAGE "SimpChinese"

; Reserve files

!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS

; ------ MUI 现代界面定义结束 ------

Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"

OutFile "测试系统安装包.exe"

InstallDir "$PROGRAMFILES\testsystem"

InstallDirRegKey HKLM "${PRODUCT_UNINST_KEY}" "UninstallString"

ShowInstDetails show

ShowUnInstDetails show

;定义系统环境变量:CATALINA_HOME

!define CATALINA_HOME "$INSTDIR\tomcat6"

;判断服务器是否已安装JDK

;Section Nil

;SectionEnd

;判断服务器是否已安装JDK入口方法

;Section "JDK"

;Call jdkcheck

;SectionEnd

;禁止多次安装

Section "ismanyInstall"

Call ismanyInstall

SectionEnd

;指定制作EXE安装包源文件的位置 入口方法

Section "gaotest" SEC03

sectionin 1

sectionin RO

SetOutPath "$INSTDIR"

SetOverwrite try

File /r "D:\testExe\*.*"

SectionEnd

;创建快捷方式和调用安装时的系列方法

Section -AdditionalIcons

SetOutPath $INSTDIR

CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"

CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\测试系统.lnk" "http://127.0.0.1:8080"

CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" "$INSTDIR\uninst.exe"

#安装服务

call regExpandStr

call installService

call startService

Call installLnk

SectionEnd

Section -Post

#1 将是否已安装的标记Installed写入注册表中

WriteRegDword HKLM "${PRODUCT_DIR_REGKEY}" "Installed" 1

WriteUninstaller "$INSTDIR\uninst.exe"

WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\tomcat6\bin\startup.bat"

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\tomcat6\bin\startup.bat"

WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"

SectionEnd

/******************************

* 以下是安装程序的卸载部分 *

******************************/

Section Uninstall

#卸载服务

call un.stopService

call un.uninstService

call un.emptyRegExpandStr

Call un.deleteLnk

!insertmacro MUI_STARTMENU_GETFOLDER "Application" $ICONS_GROUP

Delete "$INSTDIR\${PRODUCT_NAME}.url"

Delete "$INSTDIR\uninst.exe"

Delete "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk"

Delete "$SMPROGRAMS\$ICONS_GROUP\测试安装包.lnk"

Delete "$DESKTOP\测试安装包.lnk"

RMDir "$SMPROGRAMS\$ICONS_GROUP"

RMDir /r "$INSTDIR\tomcat6"

RMDir /r "$INSTDIR"

DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"

DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"

SetAutoClose true

SetAutoClose true

SectionEnd

;设置CATALINA_HOME环境变量

Function "regExpandStr"

SetOverwrite ifnewer

;设置catalina_home

WriteRegExpandStr ${WriteEnvStr_RegKey} "JAVA_HOME" "$INSTDIR\jdk1.7.0"

WriteRegExpandStr ${WriteEnvStr_RegKey} "CATALINA_HOME" "$INSTDIR\tomcat6"

#第一次是使环境变量修改对其他进程有效;刷新环境变量

SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000

SetOverwrite on

functionend

#-- 根据 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

;清空环境变量

Function "un.emptyRegExpandStr"

detailprint "正在删除相关环境变量......."

;设置TOMCAT环境变量CATALINA_HOME

WriteRegExpandStr ${WriteEnvStr_RegKey} "CATALINA_HOME" ""

WriteRegExpandStr ${WriteEnvStr_RegKey} "JAVA_HOME" ""

functionend

;停止服务

Function "un.stopService"

detailprint "正在停止tomcat服务......."

nsExec::Exec 'cmd /c sc stop tomcat6'

detailprint "停止tomcat服务成功......."

functionend

;删除服务

Function "un.uninstService"

detailprint "正在卸载tomcat服务......."

nsExec::Exec 'cmd /c sc delete tomcat6'

detailprint "卸载tomcat服务成功......."

functionend

;删除快捷方式

Function "un.deleteLnk"

RMDir /r "$SMPROGRAMS\${PRODUCT_NAME}"

SetShellVarContext current

Delete "$DESKTOP\${PRODUCT_NAME}.lnk"

FunctionEnd

;注册服务

Function "installService"

SetOutPath "$INSTDIR\tomcat6\bin"

nsExec::Exec 'cmd /c service.bat install tomcat6'

nsExec::Exec 'cmd /c sc config tomcat6 start= auto'

detailprint "install tomcat Service success..."

Sleep 2000

detailprint "install tomcat Service..."

functionend

; 启动服务

Function "startService"

detailprint "start tomcat..."

nsExec::Exec 'cmd /c net start tomcat6'

detailprint "start tomcat success..."

functionend

; 创建开始创建快捷方式

Function "installLnk"

CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\测试系统.lnk" "$INSTDIR\tomcat6\bin\startup.bat"

CreateShortCut "$DESKTOP\测试系统.lnk" "http://127.0.0.1:8080"

FunctionEnd

;判断服务器是否已安装JDK主体方法

Function "jdkcheck"

;为键的句柄创建一个缓存

System::Call "*(i 0) i .R0"

;将要检测的键放入内存中

Push "Software\JavaSoft\Java Development Kit"

;调用API进行检查,返回值在$R1中

system::call 'Advapi32::RegOpenKey(i ${HKEY_LOCAL_MACHINE}, t s, i R0) .iR1'

;关闭该键的句柄

system::call 'Advapi32::RegCloseKey(i R0)'

;释放内存

system::free

;返回值:

;0代表键存在

;2代表键不存在

;其它值表示出错

${If} $R1 == 0

Pop $R1

${ElseIf} $R1 == 2

; Messagebox mb_ok "服务器未安装Java Development Kit,简称JDK,请先安装。"

Pop $R0

; Quit

${Else}

Messagebox mb_ok "Error!"

Quit

${EndIf}

FunctionEnd

;2 禁止多次安装主体方法

Function "ismanyInstall"

;禁止多次安装实例 start

ReadRegDWORD $0 HKLM '${PRODUCT_DIR_REGKEY}' "Installed"

IntCmp $0 +1 +4

MessageBox MB_OK|MB_USERICON '$(^Name) 已安装在计算机中。如需重新安装,请卸载已有的安装。'

Quit

nop

;禁止多次安装实例 end

FunctionEnd
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: