前言
前段时间老大看我很闲...然后给我下达了一项很重要的任务:windows一键部署,需要把服务(jdk、tomcat、mysql、jar包、前端压缩包)打成一个exe应用程序,点击安装会启动所有服务,打开浏览器http://localhost:8080/xxx就可以访问系统了,运维人员一键安装即可省去了环境搭建和部署的时间。听后感觉很神奇,网上找了找确实有这种案例,于是我就开始了学习和实践,一周之后不辱使命,完美地完成任务可以去交差了
准备工作
jdk用的1.8免安装版,只需要将安装好的jdk拷贝一份即可。下载地址
tomcat用的8版本,下载后缀windows-x64.zip的免安装版。下载地址
mysql用的5.7.24免安装版,高版本有很多问题(如不需要mysql,删除其相关代码即可)。下载地址
Inno Setup6,一款为Windows程序提供的免费安装程序,通过它可以将需要的文件压缩打包成exe安装程序,然后像安装程序一样解压到另外一个环境中。下载地址

编辑脚本
编辑脚本前先来简单学习一些cmd命令
cd:进入 "%cd%":当前目录 echo:打印输出 exit:退出 pause:按下任意键继续。。。
init-path.bat
echo 配置jdk环境变量开始 cd ..\jdk echo "%cd%" set jdkpath=%cd% echo %jdkpath% setx JAVA_HOME "%jdkpath%" -m setx CLASSPATH ".;%%JAVA_HOME%%\lib\tools.jar;%%JAVA_HOME%%\lib\dt.jar" -m echo %Path% echo %Path%|find /i "%JAVA_HOME%" && set IsNull=true || set IsNull=false echo %IsNull% if not %IsNull%==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" ) echo 配置jdk环境变量完毕 echo 配置mysql环境变量开始 cd ..\mysql echo "%cd%" set mysqlpath=%cd% echo %mysqlpath% setx MYSQL_HOME "%mysqlpath%" -m echo %Path% echo %Path%|find /i "%MYSQL_HOME%" && set IsNull=true || set IsNull=false echo %IsNull% if not %IsNull%==true ( reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_SZ /d "%Path%;%%MYSQL_HOME%%\bin" /f ) echo 配置mysql环境变量完毕 exit
设置mysql的环境变量是因为可以使用mysql命令,以防sql脚本没初始化成功方便查找原因。例如:在mysql安装路径的bin目录下使用管理员打开cmd窗口
运行mysql -uroot -proot即可进入数据库 show databases; 查看所有数据库 use 数据库名称; 使用数据库 show tables; 查看所有表
init-mysql.bat
echo 安装mysql开始 cd ..\mysql set inipath=%cd%\my.ini cd bin "%cd%\mysqld.exe" -install mysql --defaults-file="%inipath%" "%cd%\mysqld.exe" --initialize-insecure --user=mysql --console echo 启动mysql并设置为自启动 net start mysql sc config mysql start=auto "%cd%\mysqladmin.exe" -u root password root echo 修改密码完毕 cd .. "%cd%\bin\mysql.exe" -uroot -proot < "%cd%\SqlFile\test.sql" echo 数据库初始化完成 exit
my.ini
[client] port=3306 default-character-set=utf8 [mysqld] wait_timeout=2880000 interactive_timeout = 2880000 max_allowed_packet = 100M sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
start.bat
echo 安装tomcat执行service.bat脚本
cd ..\tomcat\bin
echo "%cd%"
call "%cd%\"%service.bat install tomcat8
echo -------tomcat install end------------------
echo 启动tomcat服务
sc start tomcat8
wmic service where name="tomcat8" startservice
pause;
echo 启动java服务
cd ..\..\tool
echo "%cd%"
set APP_NAME=java.jar
setlocal enabledelayedexpansion
set port=9091
echo find run port: %port% process
for /f "tokens=1-5" %%a in ('netstat -ano ^| find ":%port%"') do (
if "%%e%" == "" (
set pid=%%d
echo The process pid '!pid!' has been released
) else (
set pid=%%e
echo the process pid for the current port is '!pid!'
)
echo !pid!
taskkill /f /pid !pid!
)
echo 5 seconds close this bat
echo Starting program %APP_NAME%
java -Xms2048m -Xmx5120m -server -jar %APP_NAME%
echo run %APP_NAME% Success
pause
没有将tomcat放在install文件安装时启动服务是因为第一次安装后tomcat服务总是起不来(打开任务管理器点击服务搜索tomcat8,卸载程序——>服务器重启再次安装就会出现这个问题),黑窗口也没看到错误信息,为了完美安装,无奈只好放在和jar包启动脚本一起了。
Inno Setup使用
Inno Setup在安装后的根目录下创建一个后缀.iss的文件,代码如下。
编辑完成后,点击上方Build——>Compile,等待完成打包,输出在同级目录下的Output文件

#define MyAppName "XXX管理系统"
#define MyAppVersion "V1.0"
#define MyAppPublisher "XXX科技有限公司"
#define MyAppURL "http://www.baidu.com/"
; 基本配置
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
; 单独标识,可以通过innosetup-QSP-6.0.5.exe 工具自动生成
AppId={{0167D65D-549A-4BA3-B88A-4814EC5A1D35}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
; 默认安装路径
DefaultDirName=C:\Program Files (x86)\program\
DefaultGroupName={#MyAppName}
; 软件名称
OutputBaseFilename=deployment
; 软件图标
SetupIconFile=C:\Users\Administrator\Desktop\program\tool\download.ico
; 压缩方式
Compression=lzma
; yes 可以使文件更小
SolidCompression=yes
; 必需有管理员权限才能安装
PrivilegesRequired=admin
; 安装密码
;Password=password
; 开启加密,需要一个iscrypt.dll文件,网上有下载的
;Encryption=yes
; 语言配置
[Languages]
Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"
; 安装文件
[Files]
; 安装部署的源文件路径
Source: "C:\Users\Administrator\Desktop\program\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
; 快捷键
[Icons]
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\快捷HTTP地址"; Filename: http://localhost:8080/dist
Name: "{commondesktop}\运行XXX管理系统应用程序"; Filename: "{app}\tool\start.bat"
Name: "{commondesktop}\安装须知"; Filename: "{app}\tool\安装须知.txt"
; 程序安装成功后执行脚本
[Run]
Filename: "{app}\install\init-path.bat";
Filename: "{app}\install\init-mysql.bat";
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkablealone
; 程序卸载成功后执行脚本
[UninstallRun]
Filename:"{app}\uninstall\uninstall.bat";
; 程序卸载成功后删除文件
[UninstallDelete]
Type:filesandordirs;Name:"{app}\mysql"
Type:filesandordirs;Name:"{app}\tomcat"
Type:filesandordirs;Name:"{app}\install"
Type:filesandordirs;Name:"{app}\uninstall"
FAQ:

如出现此错误,是因为安装mysql缺少文件,低版本 点击下载 Visual Studio 2013,高版本 点击下载 Visual Studio 2015

如出现此错误,是因为安装mysql缺少文件,点击下载 解压安装后将vcruntime140_1.dll复制到C:\Windows\System32,卸载mysql服务重新安装即可

运行jar包如出现此错误,是因为高版本的mysql需要SSL身份验证(低版本不需要),当然也可以不需要验证
解决方法:连接数据库的url后面加上参数即可,例如:jdbk:mysql://localhost:3306/testdb?characterEncoding=UTF-8&useSSL=false
![Java 程序设计报告[对接java的迭代器接口]](https://img-blog.csdnimg.cn/e2a8972e107d4374b67bfc5ce1328cc3.png)





![洛谷千题详解 | P1004 [NOIP2000 提高组] 方格取数【C++、Java、Pascal语言】](https://img-blog.csdnimg.cn/724eec742b2d4833bed1daf25a59e95e.png)











