inno Setup 打包Java exe可执行文件和MySQL数据库,无需额外配置实现一键傻瓜式安装
前言
出现有需要打包 Java 应用和 Mysql数据库成一个安装包给出去的需求,这里我把整个打包的流程整理一下。
环境
JDK17;
MySQL 5.7;
流程
Jpackage打包EXE
Jpackage是JDK14后加入的一个用于独立打包的工具,能够将应用打包成exe,有了Jpackage就不需要用exe4j这种打包工具,省去打包的繁琐流程。
首先在idea里面打好Jar包,记下jar包的名字,比如是application.jar。打完后Jar包的目录一般是在target文件夹下,进到项目的目录,在上方的输入栏里输入打包命令,回车。

打包命令:
jpackage --type app-image --name application --input target --main-jar application.jar --win-console --dest dist
打包完成后可以在dist文件夹里面看到对应的项目,双击exe就可以运行起项目。
jpackage命令详情:
--type:指定要创建的安装程序的类型,如exe、msi(仅限 Windows)、pkg(仅限 macOS)、deb、rpm等。--input <path>:指定要打包的输入文件或目录的路径。--dest <path>:指定生成安装程序的目标目录。--name <name>:指定应用程序的名称。--app-version <version>:指定应用程序的版本号。--main-jar <jar>:指定应用程序的主 JAR 文件。--main-class <class>:指定应用程序的主类。--icon <icon>:指定应用程序的图标文件。--vendor <vendor>:指定应用程序的供应商名称。--runtime-image <path>:指定自定义的运行时镜像目录--runtime-image 。--java-options "-D...":指定自定义VM运行参数。
MySQL打包准备
下载MySQL
进入MySQL官网,MySQL :: Download MySQL Community Server (Archived Versions),选择合适的打包,下载Zip版本。

下载完成后解压,打开解压的文件夹,这里我采用将设置好账户和创建好相应表的数据库对应的data文件夹复制到刚刚解压的MySQL根目录下,这样子我只需要用命令行初始化MySQL,不需要去执行其他创建表和账户权限的语句,即可实现数据库的开箱即用。也可以是在初始化的bat文件里执行相关的sql语句,对应下面的myinit_admin.bat文件。
配置MySQL
在根目录下创建my.ini,输入以下内容:
[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
创建两个bat文件,并且在执行bat的时候获取系统的管理员权限,如果没有管理员权限会无法初始化。
创建myinit_admin.bat文件,流程是先往my.ini里面写入mysql的路径和data文件对应的路径,获取管理员的权限进行MySQL初始化命令的执行。这个文件是在安装的时候执行。
echo
set CURRENT_DIR=%~dp0
set CURRENT_DIR=%CURRENT_DIR:\=/%
echo basedir="%CURRENT_DIR%">>%CURRENT_DIR%my.ini
echo datadir="%CURRENT_DIR%data/">>%CURRENT_DIR%my.ini
@echo off
:: 开始获取管理员权限
setlocal
set uac=~uac_permission_tmp_%random%
md "%SystemRoot%\system32\%uac%" 2>nul
if %errorlevel%==0 ( rd "%SystemRoot%\system32\%uac%" >nul 2>nul ) else (
echo set uac = CreateObject^("Shell.Application"^)>"%temp%\%uac%.vbs"
echo uac.ShellExecute "%~s0","","","runas",1 >>"%temp%\%uac%.vbs"
echo WScript.Quit >>"%temp%\%uac%.vbs"
"%temp%\%uac%.vbs" /f
del /f /q "%temp%\%uac%.vbs" & exit )
endlocal
echo
cd /d %~dp0
cd bin
"%cd%\mysqld.exe" --initialize-insecure --user=mysql --console
echo -----mysql init succee-----
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
timeout /nobreak /t 10
exit
创建mystop_admin.bat文件,同样需要获取管理员权限。这个文件是在MySQL卸载的时候执行。
@echo off
:: 开始获取管理员权限
setlocal
set uac=~uac_permission_tmp_%random%
md "%SystemRoot%\system32\%uac%" 2>nul
if %errorlevel%==0 ( rd "%SystemRoot%\system32\%uac%" >nul 2>nul ) else (
echo set uac = CreateObject^("Shell.Application"^)>"%temp%\%uac%.vbs"
echo uac.ShellExecute "%~s0","","","runas",1 >>"%temp%\%uac%.vbs"
echo WScript.Quit >>"%temp%\%uac%.vbs"
"%temp%\%uac%.vbs" /f
del /f /q "%temp%\%uac%.vbs" & exit )
endlocal
@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
Inno Setup的安装和配置
进入Inno Setup Downloads (jrsoftware.org),进行下载安装。
创建一个文件夹,将MySQL和打包后的Java应用文件夹都放到一起,Java程序放在project文件夹下。

创建Inno.iss文件,用inno Setup打开,在里面输入:
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
[Setup]
; 脚本由 Inno Setup 脚本向导 生成!
; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档!
#define MyAppName "Application"
#define MyAppVersion "1.0"
#define MyAppPublisher "zh"
#define MyAppExeName "application.exe"
[Setup]
; 注: AppId的值为单独标识该应用程序。
; 不要为其他安装程序使用相同的AppId值。
; (生成新的GUID,点击 工具|在IDE中生成GUID。)
AppId={{6CEE70A6-5DBD-43FF-9449-466A574C65E1}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
; 输入你要生成exe安装包的路径
OutputDir=E:\xxxx
; 输入程序安装后的文件名
OutputBaseFilename=Application
Compression=lzma
SolidCompression=yes
;AlwaysRestart=yes
;PrivilegesRequired=admin
[Languages]
Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1
[Files]
Source: "E:\xxx\mysql-5.7.41-winx64\*"; DestDir: "{app}\mysql-5.7.41-winx64"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "E:\xxx\project\*"; DestDir: "{app}\project"; Flags: ignoreversion recursesubdirs createallsubdirs
; 注意: 不要在任何共享系统文件上使用“Flags: ignoreversion”
; Java exe对应的目录
[Icons]
Name: "{commondesktop}\Application";Filename: "{app}\project\applicaiton.exe"; WorkingDir: "{app}\project"
[INI]
;修改数据库配置文件(注意这个步骤,在上面的myinit_admin.bat已经获得了数据库和data的路径,但是不知道为什么我获取的路径会有点问题,在这个步骤也可以写入相应的路径。
;Filename:"{app}\mysql-5.7.41-winx64\my.ini";Section:"mysqld";Key:"basedir"; String:"{app}\mysql-5.7.41-winx64"
;Filename:"{app}\mysql-5.7.41-winx64\my.ini";Section:"mysqld";Key:"datadir"; String:"{app}\mysql-5.7.41-winx64\data"
; 安装的时候会执行
[Run]
Filename: "{app}\mysql-5.7.41-winx64\myinit_admin.bat";
; 卸载的时候会执行
[UninstallRun]
Filename: "{app}\mysql-5.7.41-winx64\mystop_admin.bat";
[UninstallDelete]
Type:filesandordirs;Name:"{app}"
在软件左上方点击run

执行完成生成了一个exe安装包,双击这个安装包选择相应路径进行安装。只要Java程序已经配置好了相应的数据库连接,则安装后软件即可进行使用。
inno Setup 打包Java exe可执行文件和MySQL数据库,无需额外配置实现一键傻瓜式安装的更多相关文章
- CentOS系统 Amoeba+MySql主从读写分离配置 适合新手傻瓜式教程!-----仅供参考!
废话不说,直接开始: 一.安装mysql的三种方式,这里采用第2种(安装方式不再详解,请参照) http://www.cnblogs.com/babywaa/articles/4837946.html ...
- inno setup 打包exe程序
inno setup 用于打包生成安装程序, 是通过的一个脚本 可以将 exe 执行文件以安装的形式,解压,添加依赖,创建快捷方式. 例如,我们写了个winform,我们怎么通过安装的形式,给客户的机 ...
- Inno Setup 打包工具总结
Inno Setup 打包工具总结 分类: Install Setup 2013-02-02 15:44 2386人阅读 评论(0) 收藏 举报 最近打包用到了Inno setup,在这个过程中容易犯 ...
- 使用Inno Setup 打包.NET程序,并自动安装.Net Framework
使用Inno Setup 打包.NET程序,并自动安装.Net Framework http://www.cnblogs.com/xiaogangqq123/archive/2012/03/19/24 ...
- Inno Setup打包的程序提升为管理员权限
Inno Setup打包的程序在Win7 64位系统上安装,安装步骤最后一步若选中运行程序,会跳出一个错误提示框. 这是因为64位win7系统运行程序时需要管理员权限,而打包的文件并没有这个权限就试图 ...
- Inno Setup打包添加和去除管理员权限
原文:Inno Setup打包添加和去除管理员权限 添加管理员权限 1.在[Setup]节点添加 PrivilegesRequired=admin 2.进入安装目录,找到文件SetupLdr.e32, ...
- 将Python项目打包成EXE可执行文件(单文件,多文件,包含图片)
解决 将Python项目打包成EXE可执行文件(单文件,多文件,包含图片) 1.当我们写了一个Python的项目时,特别是一个GUI项目,我们特备希望它能成为一个在Windows系统可执行的EXE文件 ...
- 【程序打包工具 Inno Setup】CreateProcess 失败:代码 740(Inno Setup打包的程序提升为管理员权限)
原文参考 https://www.cnblogs.com/SnailProgramer/p/4243666.html http://blog.csdn.net/x356982611/article/d ...
- Inno Setup CreateProcess 失败:代码 740(Inno Setup打包的程序提升为管理员权限)
原文参考 https://www.cnblogs.com/SnailProgramer/p/4243666.html http://blog.csdn.net/x356982611/article/d ...
- 打包成exe可执行文件的方法
Python安装扩展库与打包成exe可执行文件的方法 1.安装扩展库的几种方法. 首先可能需要使用 pip install --upgrade pip 来升级本机的pip程序.然后在命令提示符环境(即 ...
随机推荐
- SC的板子库~
观前须知 Sugar_Cube的博客园主页 声明 本文所有内容遵循CC BY-NC-SA 4.0 Deed原则 本文包含了笔者常用的OI算法.数据结构的模板 不保证算法最优,但能通过相应的模板题(如果 ...
- #Trie#洛谷 7717 「EZEC-10」序列
题目 分析 考虑这些关系可以用若干个连通块表示,而可以用一个数异或边权表示, 那么每个连通块有一个生成树,而判断非树边是否合法即可, 那么问题就转换成有多少个数异或任意一个元素均不大于\(k\), 把 ...
- Git 07 IDEA基本使用
IDEA 是目前最流行的 Java 集成开发环境,我们一般使用 Git 都是在 IDEA 上操作. 这里以 2021.3.2 版 IDEA 为例. 克隆项目 1.复制 Gitee 上的项目地址 2.点 ...
- 构筑立体世界,AR Engine助力B站会员购打造沉浸式营销
随着购物场景的逐渐多元化,越来越多电商平台把线下购物体验搬到线上,运用AR技术,跨越空间距离,帮助用户在购买前"体验"商品,增强购买意愿. 哔哩哔哩会员购(后称会员购)是B站于20 ...
- k8s 深入篇———— Job与CronJob[十]
开篇 简要演练一下job 和 cronjob 正文 实际上,它们主要编排的对象,都是"在线业务",即:Long Running Task(长作业).比如,我在前面举例时常用的 Ng ...
- MUI-拿到版本名称和版本code
场景: 一般App发布了新版本之后,都会提示用户去更新.这就需要我们获取App的当前版本号与后台存储的版本号做对比来判断是否需要更新. 获取版本名称和版本code: 打开manifest.json文件 ...
- async与await暂停作用
1. async function Request () { await new Promise(res => { setTimeout(() => { console.log(1) re ...
- 从中间件到分布式数据库,PolarDB-X的透明之路
简介: PolarDB-X前身是淘宝内部使用的分库分表中间件TDDL(2007年,Java库的形态),早期以DRDS(2012年开始研发,2014年上线,分库分表中间件+MySQL Proxy的形态) ...
- Serverless 选型:深度解读 Serverless 架构及平台选择
作者 | 悟鹏 阿里巴巴技术专家 导读:本文尝试以日常开发流程为起点,分析开发者在每个阶段要面对的问题,然后组合解决方案,提炼面向 Serverless 的开发模型,并与业界提出的 Serverle ...
- 怀里橘猫柴犬,掌上代码江湖——对话阿里云 MVP郭旭东
简介: 跟郭旭东聊过之后,我对程序员的敬佩又多一分.这个92年的开发者,难能可贵地兼备朝气蓬勃的技术能量与长远深刻的行业洞见.独自承担DevOps平台从0到1的所有工作,我打趣说超级开发者不过如此,他 ...