业务需求:需要把开发的程序部署到任意一台windows上运行,操作简单,只需要点下一步,就能安装,而且第一次初始化后每次开机自动启动服务,直接访问网址即可.
最终生成文件样式:
文件路径很重要,下面所有的文件都是如图的路径,基本上所有文件,工具下载路径在底部链接
1,下载打包工具Inno Setup
InnoSetup 是一个免费的 Windows 安装程序制作软件,用来打包各个文件的,并将它们联系起来
下载地址:官网地址
inno setup代码如下,代表着打包的整体流程,调用了各个初始化脚本
-
#define MyAppName
"工资管理系统"
-
#define MyAppVersion
"V1.0"
-
#define MyAppPublisher
"自定义程序出版商"
-
#define MyAppURL
"http://localhost/login"
-
-
; 基本配置
-
[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
-5.6
.1.exe 工具自动生成
-
AppId={{
0167D65D
-549A
-4BA3-B88A
-4814EC5A1D35}
-
AppName={#MyAppName}
-
AppVersion={#MyAppVersion}
-
AppPublisher={#MyAppPublisher}
-
AppPublisherURL={#MyAppURL}
-
AppSupportURL={#MyAppURL}
-
AppUpdatesURL={#MyAppURL}
-
; 默认安装路径
-
DefaultDirName=D:\Afu_SalarySystem
-
DefaultGroupName={#MyAppName}
-
; 软件名称
-
OutputBaseFilename=阿福家工资管理系统
-
; 软件图标
-
SetupIconFile=D:\afu_jjgl_InnoSetupFile\afu.ico
-
; 压缩方式
-
Compression=lzma
-
; yes 可以使文件更小
-
SolidCompression=yes
-
; 必需有管理员权限才能安装
-
PrivilegesRequired=admin
-
; 安装密码
-
;Password=itdragon
-
; 开启加密,可能还需要一个dll文件
-
;Encryption=yes
-
-
; 语言配置
-
[Languages]
-
Name:
"english"; MessagesFile:
"compiler:Default.isl"
-
-
; 安装文件
-
[Files]
-
; 安装部署的源文件路径
-
Source:
"D:\afu_jjgl_InnoSetupFile\*"; 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/login
-
;Name:
"{commondesktop}\Mysql数据初始化脚本"; Filename:
"{app}\mysql\init-data.bat"
-
;Name:
"{commondesktop}\安装须知"; Filename:
"{app}\安装须知.doc"
-
-
; 程序安装成功后执行脚本
-
[Run]
-
;Filename:
"{app}\hide_cmd.vbs";
-
Filename:
"{app}\init-windows_dllFiles.bat";
-
Filename:
"{app}\init-jdk.bat";
-
Filename:
"{app}\mysql-8.0.21-winx64\bin\init-mysql.bat";
-
Filename:
"{app}\myService\init-afu.bat ";
-
;Filename:
"{app}\dll-file\dll-move.bat";
-
复制粘贴代码,修改其中你的文件名字和路径(建议都改成我的文件名,省事,当然只是建议)
2,安装jdk脚本的制作
-
@echo off
-
cls
-
echo.
-
set myjavapath=%cd%\ConfigFiles\Java\jdk
-8u162-windows-x64
-
-
IF EXIST
"%myjavapath%"\bin\jdk
-8u162-windows-x64.exe (
-
echo.
-
echo 发现已经安装java程序,注册环境变量请按任意键
-
echo.
-
echo.
-
goto SETENV
-
)
-
echo.
-
echo 正在安装jdk,请不要执行其他操作
-
echo.
-
echo 请稍等,这个时间大约需要二、三分钟
-
echo.
-
start /WAIT %cd%\jdk
-8u162-windows-x64.exe /qn INSTALLDIR=
"%cd%\ConfigFiles\Java\jdk-8u162-windows-x64"
-
echo 程序安装完毕,正在注册环境变量
-
echo.
-
goto SETENV
-
-
:SETENV
-
echo
-
::如果有的话,先删除ClASS_PATH
-
wmic ENVIRONMENT where
"name='CLASS_PATH'" delete
-
-
::创建JAVA_HOME
-
wmic ENVIRONMENT create name=
"JAVA_HOME",username=
"<system>",VariableValue=
"%myjavapath%"
-
-
::创建CLASS_PATH
-
wmic ENVIRONMENT create name=
"CLASS_PATH",username=
"<system>",VariableValue=
".;%%JAVA_HOME%%\lib\tools.jar;%%JAVA_HOME%%\lib\dt.jar;"
-
-
::在环境变量path中,剔除掉变量java_home中的字符,回显剩下的字符串
-
call
set xx=%Path%;%%%%JAVA_HOME%%%%\jre\bin;%%%%JAVA_HOME%%%%\bin
-
-
::echo %xx%
-
-
::将返回显的字符重新赋值到path中
-
wmic ENVIRONMENT where
"name='Path' and username='<system>'"
set VariableValue=
"%xx%"
-
echo.
-
echo JDK环境变量设置成功
-
echo.
-
echo.
-
-
:
END
-
exit
复制粘贴代码,修改其中你的文件名字和路径,初始化安装jdk脚本文件名为init-jdk.bat,放在该路径下(D:\afu_jjgl_InnoSetupFile\init-jdk.bat)
插一嘴,我下载的jdk,mysql都是免安装版本,所以目标电脑上不用设置jdk,mysql环境变量也能运行.
3.初始化安装MySQL脚本文件的制作
-
cd /d %~dp0
-
cd ..
-
del /F %cd%\my.ini
-
echo 删除完成
-
echo [mysql]>> my.ini
-
echo
default-character-
set=utf8>> my.ini
-
echo [mysqld]>> my.ini
-
echo port =
3306>> my.ini
-
echo basedir=%cd%>> my.ini
-
echo datadir=%cd%\data>> my.ini
-
echo max_connections=
200>> my.ini
-
echo character-
set-
server=utf8>> my.ini
-
echo
default-storage-engine=INNODB>> my.ini
-
echo wait_timeout=
2147483>> my.ini
-
echo interactive_timeout=
2147483>> my.ini
-
echo my.ini生成成功
-
set inipath=%cd%\my.ini
-
cd bin
-
"%cd%\mysqld.exe" -install mysql --defaults-file=
"%inipath%"
-
"%cd%\mysqld.exe" --initialize-insecure --user=mysql --console
-
net start mysql
-
sc config mysql start=auto
-
net
stop mysql
-
net start mysql
-
echo 安装完毕
-
"%cd%\mysqladmin.exe" -u root password
123456
-
echo 修改密码完毕
-
cd ..
-
"%cd%\bin\mysql.exe" -uroot -p123456 <
"%cd%\initsql\myInitSql.sql"
-
echo 数据库初始化完成
-
exit;
复制代码,将文件命名为init-mysql.bat,放在D:\afu_jjgl_InnoSetupFile\mysql-8.0.21-winx64\bin
3.1安装msql时候顺便讲开发阶段的数据库导入进去(通过执行sql语句的方式)
通过navicat或者sqlyog导出sql语句,把下面代码加到你sql文件的开头:
create database IF NOT EXISTS myDatabase character set utf8;
set global character_set_database=utf8;
set global character_set_server=utf8;
USE myDatabase ;
-
create
database
IF
NOT
EXISTS myDatabase
character
set utf8;
-
set
global character_set_database=utf8;
-
set
global character_set_server=utf8;
-
USE myDatabase ;
-
-
SET FOREIGN_KEY_CHECKS=
0;
-
-
-- ----------------------------
-
-- Table structure for `t_handwriting_image`
-
-- ----------------------------
-
DROP
TABLE
IF
EXISTS
`t_handwriting_image`;
-
CREATE
TABLE
`t_handwriting_image` (
-
`image_number`
int(
30)
unsigned
NOT
NULL AUTO_INCREMENT,
-
`user_name`
varchar(
30)
DEFAULT
NULL,
-
`id_number`
varchar(
20)
DEFAULT
NULL,
-
`image_type`
int(
10)
DEFAULT
NULL,
-
`image_dimension`
varchar(
10)
DEFAULT
NULL,
-
`image_digits`
int(
20)
DEFAULT
NULL,
-
`image_status`
int(
10)
DEFAULT
NULL,
-
`image` mediumblob,
-
`department_id`
int(
30)
DEFAULT
NULL,
-
`creat_timestamp` datetime
DEFAULT
NULL,
-
PRIMARY
KEY (
`image_number`)
-
)
ENGINE=
InnoDB AUTO_INCREMENT=
23
DEFAULT
CHARSET=utf8;
-
-
-- ----------------------------
-
-- Records of t_handwriting_image
-
-- ----------------------------
-
代码开头创建数据库语句的数据库名字改成你的数据库名.
创建文件夹initsql,放在mysql根目录下,
将初始化数据库sql语句命名为myInitSql.sql,放在D:\afu_jjgl_InnoSetupFile\mysql-8.0.21-winx64\initsql
4,winsw使用
用途:使用Spring Boot开发的Web项目,打包生成了一个jar包,部署在Windows服务器中,设置为开机启动
下载地址:GitHub
我使用的是winsw-v2.2.0,将Git Hub中下载的WinSW.NET4.exe和sample-minimal.xml文件及springboot项目的jar包放在同一个文件夹中
将winsw执行程序跟xml改成同样的名字
4.1编辑myProjectService.xml文件
-
<configuration>
-
-
<!--安装成Windows服务后的服务名-->
-
<id>afuService</id>
-
<!--显示的服务名称-->
-
<name>afuService</name>
-
<!--对服务的描述-->
-
<description>阿福计件管理系统</description>
-
<!--这里写java的路径,如何配置了环境变量直接写
"java"就行-->
-
<executable>java</executable>
-
<!--Xmx256m 代表堆内存最大值为
256MB -jar后面的是项目名-->
-
<arguments>-Xmx256m -jar afu.jar</arguments>
-
<!--日志模式-->
-
<logmode>rotate</logmode>
-
-
</configuration>
4.2创建初始化启动服务批处理文件init-afu.bat
-
echo -------afuService begin--------
-
"%cd%\afuService.exe" install afuService
-
echo -------afuService install end------------------
-
sc config afuService start= auto
-
net start afuService
-
exit
放在D:\afu_jjgl_InnoSetupFile\myService下
5,下载并安装运行软件所需要的dll文件(这些文件正常来说是没有的,除非你以前装过,否则会报错)
dll文件下载地址:文章底部链接
5.1创建自动安装dll文件的脚本init-windows_dllFiles.bat
start /wait %cd%\windows_dllFiles.exe /q /norestart exit
放在D:\afu_jjgl_InnoSetupFile
6编译成安装包
上面全部没问题后,点击inno setup上的编译
会在同级目录下生成output文件夹里面放的就是安装包
7其他
jdk,msql我用的绿色免安装版本,所以不需要环境变量,下载链接在底部
关于web项目怎么打包成一键部署的exe文件,多一步把tomcat加进去,我没有试过,感兴趣的小伙伴可以自己尝试一下
下载地址链接:https://pan.baidu.com/s/16-oLkKySz5uQ9E0KAlXiyA
提取码:mbv3