jar包转exe封装软件并一键安装使用

news2024/11/17 9:46:04

目录

        • 封装文档说明
        • 如有跨域问题在ems服务增加配置
        • 服务启动自动打开浏览器
        • 使用工具 Launch4j 把jar包打成exe执行文件
        • 现在还不能给用户用,因为缺少jre,后面整合资源会把jre一起打包
        • 使用inno setup合并资源,mysql之类的服务,最终打包成exe安装包

封装文档说明

主要封装的作用:简化用户的操作,一键安装,直接使用,无需多余配置

直接把安装包甩给用户,用户开箱即用!!!

前端访问后端url设为http://localhost:1060/api/

后端mysql连接设为localhost 用户名root,密码tecloman

SpringBoot使用内置tomcat启动vue

前端dist打包后的文件夹放到/resource/static目录下

image

后端配置增加

    spring:
      web:
        resources:
          static-locations: classpath:/static/
如有跨域问题在ems服务增加配置
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.cors.CorsConfiguration;
    import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
    import org.springframework.web.filter.CorsFilter;
    
    @Configuration
    public class CorsConfig {
        @Bean
        public CorsFilter corsFilter() {
            CorsConfiguration config = new CorsConfiguration();
            config.setAllowCredentials(true); // 如果需要携带cookie,设为true
            config.addAllowedMethod("*"); // 允许所有HTTP方法
            config.addAllowedHeader("*"); // 允许所有请求头
            // 显式列出允许的源或者使用allowedOriginPatterns
            // 允许来自localhost:1060的请求
            config.addAllowedOrigin("http://localhost:1060");
            // 或者使用allowedOriginPatterns
            // config.setAllowedOriginPatterns(Arrays.asList("http://*.yourdomain.com"));
            UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
            source.registerCorsConfiguration("/**", config); // 对所有路径应用CORS配置
            return new CorsFilter(source);
        }
    }
服务启动自动打开浏览器
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.stereotype.Component;
    
    import java.io.IOException;
    
    @Slf4j
    @Component
    public class StartupRunner implements CommandLineRunner {
        @Override
        public void run(String... args) {
            // 服务启动打开浏览器
            openBrowser("http://localhost:1060/hss_web/index.html");
        }
        private void openBrowser(String url) {
            String os = System.getProperty("os.name").toLowerCase();
            try {
                if (os.contains("win")) {
                    Runtime.getRuntime().exec("cmd /c start " + url);
                } else if (os.contains("mac") || os.contains("darwin")) {
                    Runtime.getRuntime().exec("open " + url);
                }
            } catch (IOException e) {
                System.err.println("Failed to open browser: " + e.getMessage());
            }
        }
    }
使用工具 Launch4j 把jar包打成exe执行文件

服务打成jar包

下载封装程序相关软件.zip,解压后如下

image

将ems服务jar包放到解析目录,改名为ems.jar

打开Launch4j文件夹下的launch4j.exe,并打开配置文件,ems.xml

image

界面如下,只要jar包放在解压目录则不用更改

image

唯一需要改的地方,更改启动配置文件

image

最后点击齿轮保存文件并生成exe文件,就会像图1一样多了ems.exe文件,本机可直接启动,

现在还不能给用户用,因为缺少jre,后面整合资源会把jre一起打包

image

使用inno setup合并资源,mysql之类的服务,最终打包成exe安装包

安装合并工具Inno Setup v6.0.4 汉化版,在解压目录下

打开innosetup 再打开封装脚本文件.iss,如下图

image```yaml

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "EmsApp"
#define MyAppVersion "1.5"
#define MyAppPublisher "tecloman"
#define MyAppURL "https://www.tecloman.com/"
#define MyAppExeName "ems.exe"

[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.)
AppId={{FC10B53B-96FE-4703-AFD3-10E414E9EE47}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableProgramGroupPage=yes
OutputDir=C:\Users\Administrator\Desktop
OutputBaseFilename=emsSetup
;SetupIconFile=C:\Users\Administrator\Desktop\add\jdk1.8-windows-x64_00001.ico
Compression=lzma
SolidCompression=yes

[Languages]
Name: "English"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "C:\Users\Administrator\Desktop\add\ems.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\Administrator\Desktop\add\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
[Setup]
PrivilegesRequired=admin
SetupLogging=yes

[INI]
;修改数据库配置文件
Filename:"{app}\mysql\my.ini";Section:"mysqld";Key:"basedir"; String:"{app}\mysql";
Filename:"{app}\mysql\my.ini";Section:"mysqld";Key:"datadir"; String:"{app}\mysql\data";
[Code]
[Run]
;Filename: "notepad.exe"; Parameters: "{app}\mysql\my.ini"; StatusMsg: "正在检查my.ini配置文件...请确认修改后关闭Notepad以继续安装。"; Flags: waituntilterminated 

;Filename: "{app}\mysql.bat"; Description: "正在执行启动脚本..."; Flags: runhidden           mysqld --initialize --console
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
Filename: "{app}\mysql.bat"; Description: "正在执行MySQL服务安装和启动脚本..."; Flags: shellexec


[UninstallRun]
; 停止MySQL服务
Filename: "net"; Parameters: "stop MySQLService"; StatusMsg: "正在停止MySQL服务..."; Flags: runhidden waituntilterminated
; 卸载MySQL服务
Filename: "{app}\mysql\bin\mysqld.exe"; Parameters: "--remove MySQLService"; WorkingDir: "{app}\mysql\bin"; StatusMsg: "正在卸载MySQL服务..."; Flags: runhidden waituntilterminated

资源路径下的mysql,我是初始化过的,设置过密码 root tecloman,所以安装完成后只需要注册服务并启动就可以了,这由mysql.bat做处理,我们需要提前把EMS相关的数据库提前建立好,所以在资源路径下的mysql\data目录下就得先弄好,最后生成安装包,用户解压即可使用

    # 初始化,密码会显示在控制台 最后一行
    mysqld --initialize --console
    # 注册服务
    mysqld --install MysqlService --defaults-file="C:\Users\Administrator\Desktop\add\mysql\my.ini"
    # 启动服务
    net start MysqlService
    # 登陆
    mysql -uroot -pHj6u5Kp.)ti9
    # 修改密码
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'tecloman';
    # 刷新权限 
    FLUSH PRIVILEGES;

image

如果注册服务失败,肯定是配置文件有问题,注册成功后会在/mysql目录生成data目录,data目录主要存放ems相关的数据库数据

连接数据库把ems相关的数据拷贝到当前mysql就可以了,mysql就可以放到资源目录下,把刚创建的mysql服务停止移除,sc delete MySqlService 否则打包程序运行不了

资源目录详情

image

jre是运行jar必备的,

mysql就是刚初始化过的,不要直接把未初始化过的放过来,因为mysql初始化是不能手动设置密码的,

mysql.bat是安装后运行的批处理文件,如下,安装包会自动执行

set “CURRENT_DIR=%~dp0” 这代表当前目录的变量(安装目录)

    setlocal enabledelayedexpansion
    set "CURRENT_DIR=%~dp0"
    @echo 注册服务
    "%CURRENT_DIR%mysql\bin\mysqld.exe" --install MySQLService --defaults-file="%CURRENT_DIR%mysql\my.ini"
    @echo 启动服务
    net start MySQLService
    pause

编译

image

会在输出目录生成一个exe安装文件

innosetup语法大全

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1859068.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙 HarmonyOS NEXT星河版APP应用开发-阶段二

一、鸿蒙应用界面开发 弹性布局-Flex 语法 /* 弹性容器组件 Flex() 位置: Flex默认主轴水平往右,交叉轴垂直向下(类似Row) 语法: Flex(参数对象){子组件1,子组件2,子组件3 } 属性方法: direction&#xf…

2-15 基于matlab的蚁群,模拟退火,遗传,神经网络,禁忌搜索等智能优化算法对TSP问题

基于matlab的蚁群,模拟退火,遗传,神经网络,禁忌搜索等智能优化算法对TSP问题。五种优化算法对多个城市路径进行规划,通过优化速度、距离可比较五种方法的优劣。程序已调通,可直接运行。 2-15 蚁群优化算法 …

【UEFI实战】HttpBoot

环境配置 首先下载tftpd工具,可以在phjounin / tftpd64 / Downloads — Bitbucket下载到,建议不要安装到C盘,因为可能无法修改其配置。配置tftpd工具的DHCP服务: 注意这里的IP地址需要跟实际网卡IP匹配。 下载Apache&#xff0c…

短视频矩阵系统搭建部署,AI剪辑短视频,矩阵发布,一键管理矩阵账号

目录 前言: 一、短视频矩阵系统功能是怎么样的? 二、怎么制作这样一款系统? 总结: 前言: AI短视频矩阵系统,利用AI编辑短视频的功能,将素材上传到系统里面,AI可以自动剪辑成新的短…

【计算机视觉】人脸算法之图像处理基础知识【七】

直方图均衡化 直方图均衡化是一种常用的图像处理技术,用于改善图像的对比度,特别是在图像的细节被埋没在暗部或亮部区域时。通过重新分配图像的像素强度值,使得图像的整体对比度增强,从而让更多的细节变得可见。 import cv2 imp…

关于NACHI机器人语言程序的反编译

所谓反编译,是指将执行形式的程序转换为机器人语言程序(ASCII 文件)。作业程序(执行形式)→机器人语言程序(源程序)。 机器人语言的源程序为纯文本形式,可使用个人电脑的文本编辑器…

针对AIGC检测的鲁棒性测试——常见攻击手段汇总

前言:这篇文章来总结一下针对AIGC检测的常见攻击手段,选取的研究工作均出自近5年AIGC检测相关文章。(论文被拒了需要补实验,先来看看别人怎么做的……) 2019 WIFS Detecting and Simulating Artifacts in GAN Fake Ima…

Charles抓包工具系列文章(一)-- Compose 拼接http请求

一、背景 众所周知,Charles是一款抓包工具,当然是http协议,不支持tcp。(如果你想要抓tcp包,请转而使用wireshark,在讲述websocket的相关技术有梳理过wireshark抓包) 话说回来,char…

企业文件传输系统只能传输?分享功能同样重要!(上)

在当今的商业世界里,企业间的协作和信息交流已经变得极其重要,特别是在处理那些庞大的文件时。想象一下,设计图、高清视频、大数据分析,还有软件开发包,这些文件的大小往往达到GB甚至TB级别,它们是企业日常…

守护生产车间安全:可燃气体报警器预警与检测的重要性

近日,东莞一材料厂发生的火灾事故再次敲响了工业安全生产的警钟。 这起事故不仅给工厂带来了巨大的经济损失,也暴露了一些企业在安全管理方面的疏漏。其中,可燃气体报警器的应用与预警功能在火灾防范中扮演了至关重要的角色。 接下来&#…

AlgorithmStar 度量 计算组件

AlgorithmStar 度量 计算组件 AlgorithmStar 本文将会基于 AlgorithmStar 1.40 以及以上的版本来演示,度量 计算 组件 的使用! 目录 文章目录 AlgorithmStar 度量 计算组件目录获取到依赖库度量计算组件 计算实例距离计算代表 - 欧几里德距离计算组件…

麒麟信安系统关闭core文件操作

在使用麒麟信安系统时,如果应用程序运行过程中崩溃了,此时并不会导致内核崩溃,只会在tmp目录下产生崩溃数据,如下图 不过tmp目录下的分区容量有限,当崩溃的应用core文件过大时将会占用tmp空间,导致tmpfs分区…

零代码搭建AI应用-文心智能体的设计与实现

本教程旨在帮助你开发一个结合语音识别和信息查询技术的智能应用,为用户提供登山小技巧和心得体会,满足用户在户外运动中的需求。通过设计不同角色和场景,可以满足用户在不同生活领域的需求,例如在家庭、社交、职场等场景下提供不…

37. 变焦镜头

导论: 设计好的一组镜头如果变化镜片与镜片之间的空气厚度,镜头的焦距会随之变化。 通常来说一个系统的接收面尺寸大小是固定不变的。 设计要求: 设计一个简单的变焦镜头:入瞳直径25mm,焦距75~125mm,像…

为什么说大模型训练很难?

前言 在人工智能的浪潮中,大模型训练无疑是一股不可忽视的力量。然而,这背后的过程却充满了挑战与困难。今天,让我们一同揭开大模型训练的神秘面纱,探讨为何它值得您的关注与投入。 大模型训练的挑战 大模型训练之所以难&…

物联网技术-第5章-物联网数据处理

目录 1.物联网数据特征 2.物联网数据处理 (1)数据清洗 (2)数据存储 (3)数据融合 (4)数据挖掘 3.大数据基本概念 4.云计算基本概念 (1)背景 &#xf…

Python学习笔记18:进阶篇(七)常见标准库使用之OS模块

前言 入门到进阶的知识点基本都学习了,可能有一些遗漏的请谅解,不过只要坚持学习下去,在后面的学习中进行查缺补漏。 根据Python crash course书中的进度,要准备开始写小项目了。在这之前,我看了Python的官方教程&am…

Redis-主从复制-配置主从关系

文章目录 1、修改配置文件中的 bind ,注释该配置,取消绑定仅主机登录2、修改protected-mode 为no,取消保护模式3、查看redis的进程状态4、配置6380是6379的从机5、配置6381是6379的从机6、查看主机 6379 的主从信息 1、修改配置文件中的 bind ,注释该配置,取消绑定仅主机登录 …

Linux 运维 | 4.从零开始,文件目录特殊权限管理实践

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 0x00 前言简述 描述:前一章,学习了Linux系统中的用户与用户组的管理,此章节我们将继续学习Linux系统中比较基础且重要的文件权限设置与属性管理,在L…

Zoho邮箱怎么注册?最强完整指南

Zoho企业邮箱,凭借其16年的产品历程和卓越的服务品质,已经成为全球超过1800万企业级客户的信赖之选。今天,我们将手把手教你如何注册Zoho邮箱。 一、Zoho邮箱是什么? Zoho邮箱是Zoho Workplace套件中的核心产品,专门…