MySql Tomcat JDK 环境打包成exe文件,一键安装部署环境

本文详细介绍了如何在Windows上将MySQL、JDK和Tomcat环境打包成EXE文件,实现一键安装部署。通过创建配置文件、批处理脚本和使用InnoSetup打包工具,解决了路径问题,确保了服务的正常启动和环境变量的设置。最终生成的EXE文件可在目标机器上完成自动化部署,简化了手动配置的复杂过程。
摘要由CSDN通过智能技术生成

论述

这些天因需要,故研究了一下环境exe打包的操作,本人也参考了很多篇文章,也找过文章作者,终于皇天不负有心人,个人虚拟机下配置成功,以下是具体操作步骤

前期准备

新建一个文件夹,准备好需要的环境解压包,我这边就是新建一个test文件加里面在建一个environment文件夹,将mysql,tomcat,jdk全部放置在里面

在这里插入图片描述
在这里插入图片描述

配置mysql

首先新建一个配置文件my.ini
在这里插入图片描述
以下是my.ini文件的内容,注意没有basedir,datadir,其他文章是有写起来的,但是本人亲测mysqld --initialize 这个命令会受反斜杠的影响而报错,即使是后面的iss文件修改的路径,{app}获取过来的路径也是反斜杠的,我也试过盘符后双反斜杠的话,mysql命令不会报错,但是我从其他文章里找到一种方法{app}{}这种能拼成盘符后的双反斜杠,但是我测试过没有实现

[client]
port=3306
[mysql]
default-character-set=utf8
[mysqld]
port=3306
character-set-server=utf8
default-storage-engine=INNODB
max_connections=100
table_open_cache=256
tmp_table_size=35M
thread_cache_size=8
myisam_max_sort_file_size=100G
myisam_sort_buffer_size=69M
key_buffer_size=50M
read_buffer_size=64K
read_rnd_buffer_size=256K
sort_buffer_size=256K
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=1M
innodb_buffer_pool_size=96M
innodb_log_file_size=20M
innodb_thread_concurrency=18

还需要新建一个myini.bat文件用来解决上述提到的问题,以下是文件内容

echo
set CURRENT_DIR=%CD%
set CURRENT_DIR=%CURRENT_DIR:\=/%
echo basedir="%CURRENT_DIR%/">>my.ini
echo datadir="%CURRENT_DIR%/data/">>my.ini

新建一个文件夹sql,用来装需要执行的sql文件,文件头记得添加新建数据库的语句
在这里插入图片描述
进入bin目录,新建mysql_init.bat,mysql_stop.bat两个文件
mysql_init.bat 如果想要停住可加pause;用来查看dos窗口信息,批处理的语句也可以去查看了解了解
下面的注解记得去掉,此处是为了讲解

cd /d %~dp0 
//用来生成mysql的data文件夹
"%cd%\mysqld.exe" --initialize-insecure --user=mysql --console
echo -----mysql init succee-----
//安装mysql服务
mysqld install mysql 
echo -----mysql service install succee-----
//设置成自启动
net start mysql
sc config mysql start=auto 
net stop mysql
net start mysql
echo Installation complete 
//设置用户密码
"%cd%\mysqladmin" -u root password root
echo Password change completed 
cd .. 
//执行之前需要的sql
"%cd%\bin\mysql.exe" -uroot -proot < "%cd%\sql\traffic_engineering_test.sql" 
echo Table creation completed 
echo Create new user completed
exit

mysql_stop.bat
卸载的命令,也可以到mysql的bin目录下,先net stop mysql 停止mysql服务,再mysqld remove mysql 删除服务

@echo off
cd /d %~dp0
echo ----1.[Mysql] start uninstalling Mysql ---->>../log.txt
sc stop mysql
sc delete mysql
echo ----2. [Mysql] uninstall finished---- >>../log.txt
exit

至此,mysql准备结束

JDK

JDK没什么可准备的,但我浏览过其他文章是把java放到tomcat的bin里面,然后再在jdk的bin里面写一个bat文件,本人觉得不一定这样做,而且后续需要写环境变量的时候可能会有问题,后文会提及通过一个bat文件将所有的环境变量一起写入,JDK准备好文件即可
在这里插入图片描述

Tomcat

tomcat也不用在里面加什么bat,其他文章也会有修改service.bat,然后在添加一个启动服务的bat文件,我觉得没必要,而且我这边测试会出现问题,所以就没有按照这一种做法,tomcat也是准备好文件即可
在这里插入图片描述

environment.bat

这个文件就放在environment文件夹下,用来配置所有需要添加的环境变量
在这里插入图片描述
这个文件也是我查询了很多文章,认为可行的方法,就是一次性配置好需要的环境变量,其他文章可能会分开写入环境变量,但我测试发现,环境变量可能会没写入成功,所以采取这种方案,注解记得删除

@echo off 
echo  "%~dp0"
//当前路径
echo "%cd%"
//设置各个环境变量的值
set mysqlpath=%cd%\mysql-5.7.33-winx64
set javapath=%cd%\Java\jdk1.8
set tomcatpath=%cd%\apache-tomcat-8.5.51
//写入环境变量
echo %mysqlpath%
setx MYSQL_HOME "%mysqlpath%" -m
echo %javapath%
setx JAVA_HOME  "%javapath%"  -m
echo %tomcatpath%
setx CATALINA_HOME "%tomcatpath%" -m
echo %Path%
查询path中是否有
echo %Path%|find /i "%MYSQL_HOME%" && set MysqlIsNull=false || set MysqlIsNull=true
echo %MysqlIsNull%
echo %Path%|find /i "%JAVA_HOME%" && set JavaIsNull=false || set JavaIsNull=true
echo %JavaIsNull%
//判断追加path
if %MysqlIsNull%==true if %JavaIsNull%==true (
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_SZ /d "%Path%;%%MYSQL_HOME%%;%%JAVA_HOME%%\bin;%%JAVA_HOME%%\jre\bin" /f
setx Path "%%MYSQL_HOME%%\bin;%Path%;%%JAVA_HOME%%\bin;%%JAVA_HOME%%\jre\bin"
)
if %MysqlIsNull%==true if %JavaIsNull%==false (
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_SZ /d "%Path%;%%MYSQL_HOME%%" /f
setx Path "%%MYSQL_HOME%%\bin;%Path%"
)
if %MysqlIsNull%==false if %JavaIsNull%==true (
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_SZ /d "%Path%;%%JAVA_HOME%%\bin;%%JAVA_HOME%%\jre\bin" /f
setx Path "%Path%;%%JAVA_HOME%%\bin;%%JAVA_HOME%%\jre\bin"
)
echo
//设置临时变量 此处也是测试了很多种方案,始终发现tomcat的服务写进去但是没有启动,所以打算在这里就将tomcat服务写进去
setlocal
set "CATALINA_HOME=%tomcatpath%"
set "JAVA_HOME=%javapath%"
call apache-tomcat-8.5.51\bin\service.bat install
sc config Tomcat8 start= auto
net start Tomcat8
exit

下载打包工具Inno Setup

打包exe需要用到Inno Setup这个软件链接在下
Inno Setup解压包

准备iss文件用来打包exe

和environment文件夹同个目录下
在这里插入图片描述
now.iss
具体的内容含义还是要去搜索下Inno Setup,以下具体说几点
[Files]
是要拷贝的文件
[INI]
里面的内容是注释了的,就是因为发现这样修改,MySQL的my.ini文件里的路径还是会让mysql命令出错,所以采取之前说的那种做法
[Run]
是要执行的bat文件
[UninstallDelete]
是要卸载删除的文件,注意卸载前需要先删掉注册了的服务,对于卸载这一块的bat还没有去看,大概猜想也是再卸载是需要执行的bat

; 脚本由 Inno Setup 脚本向导 生成!

[Setup]

;: AppId的值为单独标识该应用程序。

; 不要为其他安装程序使用相同的AppId值。

; (生成新的GUID,点击 工具|在IDE中生成GUID。)

AppId={{9E044575-9CD9-4751-B0BE-F6758BA94548}

AppName=Test

AppVersion=V0.01

AppVerName=TestServer V0.01

AppPublisher=TestTechnology

AppPublisherURL=http://www.baidu.com/

AppSupportURL=http://www.baidu.com/

AppUpdatesURL=http://www.baidu.com/

DefaultDirName={pf}\Test

DefaultGroupName=TestSoftWare

AllowNoIcons=yes

OutputBaseFilename=Test

Compression=lzma

SolidCompression=yes

[Files]



Source:"D:\test\environment\*";DestDir:"{app}\environment";Flags:igNoreversion recursesubdirs createallsubdirs

[Languages]

Name: "english"; MessagesFile: "compiler:Default.isl"

 

[Icons]

Name: "{group}\{cm:UninstallProgram,交通工程监管系统}"; Filename: "{uninstallexe}"

Name: "{commondesktop}\交通工程监管系统"; Filename: http://localhost:8304/traffic/doc.html 

[INI]

;修改数据库配置文件

;Filename:"{app}\mysql-5.7.33-winx64\my.ini";Section:"mysqld";Key:"basedir"; String:"{app}{\}mysql-5.7.33-winx64"

;Filename:"{app}\mysql-5.7.33-winx64\my.ini";Section:"mysqld";Key:"datadir"; String:"{app}{\}mysql-5.7.33-winx64\data"

;Filename:"{app}\mysql-5.7.33-winx64\my.ini";Section:"mysqld";Key:"port"; String:"3306"

;Filename:"{app}\mysql-5.7.33-winx64\my.ini";Section:"client";Key:"port"; String:"3306"

 

[Run]
Filename: "{app}\environment\mysql-5.7.33-winx64\myini.bat";

Filename: "{app}\environment\environment.bat";

Filename: "{app}\environment\mysql-5.7.33-winx64\bin\mysql_init.bat";

[UninstallDelete]

Type:filesandordirs;Name:"{app}\environment"

打包

点击运行,会在同级目录下出现Output文件夹,里面的exe就是我们打出来的包
在这里插入图片描述
在这里插入图片描述

安装测试

本人实在虚拟机下测试的
安装前先安vcredist_x64.exe 避免mysql缺失dll文件导致配置不成功,后续补上链接
补上的链接
安装完后可先查看服务时候已经存在并且是自启动
用services.msc命令
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查看环境变量是否写入且正确
在这里插入图片描述
查看是否写入path
在这里插入图片描述
查看java环境是否生效
在这里插入图片描述
查看mysql是否可连
在这里插入图片描述
访问localhost:8080查看tomcat是否启动正常
在这里插入图片描述
至此环境就部署成功了

总结

本人也是首次接触这个,通过这几天文章的研究,总算是可行了,特此记录以下,因为我发现按照现在几篇文章的流程会报错,所以现在整理一篇,也方便自己后续回顾,初次打包exe,不足之处,多多包涵

一.环境变量配置 ; 定义系统环境变量的 注册表key值 !define WriteEnvStr_RegKey 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' ;设置环境变量 Function "regExpandStr" SetOverwrite ifnewer ;设置jdk环境变量 WriteRegExpandStr ${WriteEnvStr_RegKey} "JAVA_HOME" "$INSTDIR\jdk1.8.0_131" ;设置CATALINA_DIR WriteRegExpandStr ${WriteEnvStr_RegKey} "CATALINA_DIR" "$INSTDIR\tomcat\bin" ;设置CATA_LINA WriteRegExpandStr ${WriteEnvStr_RegKey} "CATA_LINA" "$INSTDIR\tomcat" ;设置path ReadRegStr $0 HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "Path" WriteRegExpandStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "Path" "$0;C:\windows\system32;$INSTDIR\redis;$INSTDIR\mysql\bin;$INSTDIR\Java\jdk1.8.0_131\bin;" #第一次是使环境变量修改对其他进程有效;刷新环境变量 SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 SetOverwrite on functionend ;注册服务 Function "installService" detailprint "------------------------------------install tomcat Service..." Sleep 2000 SetOutPath "$INSTDIR\tomcat\bin" nsExec::Exec 'cmd /c service install' nsExec::Exec 'cmd /c sc config tomcat8 start= auto' ;设置服务自动开启 detailprint "------------------------------------install tomcat Service success..." detailprint "install mysql Service..." Sleep 2000 SetOutPath "$INSTDIR\mysql\bin" nsExec::Exec 'cmd /c $INSTDIR\mysql\bin\mysqld.exe" -install Mysql --defaults-file="$INSTDIR\\mysql\\my.ini' detailprint "install mysql Service success..." detailprint "------------------------------------install redis Service..." Sleep 2000 SetOutPath "$INSTDIR\redis" nsExec::Exec 'cmd /c redis-server --service-install redis.windows.conf' detailprint "install redis Service success..." functionend ; 启动服务 Function "startService" detailprint "------------------------------------start tomcat..." nsExec::Exec 'cmd /c sc start Tomcat8' detailprint "------------------------------------start tomcat success..." detailprint "------------------------------------start mysql..." nsExec::Exec 'cmd /c sc start mysql' detailprint "------------------------------------start MySQL success..." detailprint "------------------------------------start redis..." ;nsExec::Exec 'cmd /c sc redis-server --service-start --service-name redis' detailprint "------------------------------------start redis success..." functionend ;停止服务 Function "un.stopService" detailprint "正在停止tomcat服务......." nsExec::Exec 'cmd /c sc stop tomcat8' detailprint "停止tomcat服务功......." detailprint "正在停止mysql服务......." nsExec::Exec 'cmd /c sc stop mysql' detailprint "停止mysql服务功......." detailprint "正在停止redis服务......." nsExec::Exec 'cmd /c sc redis-server --service-stop --service-name redis' detailprint "停止redis服务功......." functionend ;删除服务 Function "un.uninstService" detailprint "正在卸载tomcat服务......." nsExec::Exec 'cmd /c sc delete tomcat8' detailprint "卸载tomcat服务功......." detailprint "正在卸载mysql服务......." nsExec::Exec 'cmd /c sc delete mysql' detailprint "卸载mysql服务功......." detailprint "正在卸载redis服务......." nsExec::Exec 'cmd /c sc delete redis' detailprint "卸载redis服务功......." functionend ;清空环境变量 Function "un.emptyRegExpandStr" #删除 系统环境变量JAVA_HOME 和 CATALINA_HOME #卸载的时候必须设置JAVA_HOME 和 CATALINA_HOME两个环境系统变量为空,或者删除这两个系统变量。否则会出现NSIS选择系统变量的错误(NSIS会自动选择之前有值的系统变量,而不是选择当前刚设置的系统变量) detailprint "正在删除相关环境变量......." functionend 二.校验mac地址 #序列号 校验页面 Page custom check_serial_number Var "MacAddress" Function check_serial_number Call .GetMacAddress #MessageBox MB_OK '当前机器Mac地址为:$MacAddress' ${if} $MacAddress == '00-50-56-C0-00-08' ${OrIf} $MacAddress == '00-50-56-C0-00-081' #MessageBox MB_OK '已授权' ${Else} MessageBox MB_OK '未授权,请联系经销商并授权!' ;SendMessage $HWNDPARENT 0x408 3 0 #页面跳转 Call onClickClose ${EndIf} FunctionEnd #获取主机MAC地址 Function .GetMacAddress System::Call Iphlpapi::GetAdaptersInfo(i,*i.r0) System::Alloc $0 Pop $1 System::Call Iphlpapi::GetAdaptersInfo(ir1r2,*ir0)i.r0 StrCmp $0 0 0 finish loop: StrCmp $2 0 finish System::Call '*$2(i.r2,i,&t260;.s,&t132;.s,i.r5)i.r0' ;Unicode版将t改为m IntOp $3 403 + $5 StrCpy $6 "" ${For} $4 404 $3 IntOp $7 $0 + $4 System::Call '*$7(&i1;.r7)' IntFmt $7 "X" $7 StrCpy $6 "$6$7" StrCmp $4 $3 +2 StrCpy $6 "$6-" ${Next} StrCpy $MacAddress $6 Goto loop finish: System::Free $1 FunctionEnd 三.关闭按钮功能 ;点击右上角关闭按钮 Function onClickClose FindProcDLL::FindProc "${PRODUCT_NAME}.exe" Sleep 500 Pop $R0 ${If} $R0 != 0 KillProcDLL::KillProc "${PRODUCT_NAME}.exe" ${EndIf} FunctionEnd
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值