首页 > 编程语言 >springBoot应用使用exe4j与innosetup打包为exe可执行程序手把手教学

springBoot应用使用exe4j与innosetup打包为exe可执行程序手把手教学

时间:2024-08-27 17:51:38浏览次数:11  
标签:文件 exe springBoot n% 文件夹 安装程序 安装 可执行程序

文章目录

1.welecome

    输入License点击下一步

image-20240826143630941

    下载exe4j软件并解压安装,点击运行exe4j_windwos-x64_6_0_2.exe,我的windwos电脑操作系统是windows10-64bit的所以我选这个exe文件安装64位的软件,这一步只需点击下一步选择安装路径即可安装好,打开软件之后,运行如下软件获取序列号即可

    exe4j解压包如下:

image-20240826151654076

    安装位置:

image-20240826152129336

    exe4j软件下载:

链接:https://pan.baidu.com/s/1vVwun3SQda7PnkpdkbFLkQ 
提取码:b4vx

2.选择JAR in EXE mode

image-20240826143651699

3.应用信息

image-20240826143801248

4.Executable info

    选择GUI application 程序会在后台运行,无界面

    选择Console application 程序会起cmd窗口

    选择Server程序会作为一个后台进程运行(猜测)

image-20240826144109680

image-20240826144411702

image-20240826144442296

5.启动配置

    jvm参数

-Xms1024m -Xmx1024m -server -XX:PermSize=512M -XX:MaxPermSize=1024m -XX:+PrintGCDetails -XX:+UseG1GC

image-20240826145023593

image-20240826145534691

image-20240826144816514

    Class path需要选择JarLauncher,如果选择springBoot的主类打出来的exe可执行文件会报错

image-20240826144713810

6.JRE

image-20240826145149196

image-20240826163240360
    jdk安装使用的是exe文件安装的会去注册表里注册jdk的信息也会配置系统环境变量JAVA_HOME信息

    如果没有使用exe可执行文件安装的jdk,就需要自行配置JAVA_HOME相关环境变量(省略~需要配置JAVA_HOME:java的解压目录、path里加上:%JAVA_HOME%\bin 和%JAVA_HOME%\jre\bin即可)

image-20240826163153462

    如果部署的windows上安装了java的环境,就不用配置.\jre的位置指定了

image-20240826145410520

7.生成可执行exe文件

image-20240826150708619

    新建barrier.exe的快捷方式

win + R输入

shell:startup

image-20240826151425001

    先杀掉barrier.exe的java进程之后,重启电脑在此查看barrier.exe是否启动,重启后查看java进程如下:

image-20240826185512528

    可以看到这个barrier.exe的程序已经正常启动了,这种建立快捷方式加入到菜单–>程序–>启动(win + R 输入shell:startup快速打开【菜单–>程序–>启动】)下的方式是OK的。

8.点击exe启动查看进程

image-20240826145900171

    windwos环境结束java程序命令:

>taskkill /PID <PID> /F
taskkill /PID 11476 /F

    结束java应用进程成功如下图所示:

image-20240826151120410

9.查看日志

    查看日志输出:springBoot的logback-spring.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="FILE_ERROR_PATTERN"
              value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} %file:%line: %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
        </filter>
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <!--<charset>UTF-8</charset>-->
        </encoder>
    </appender>

    <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--如果只是想要 Info 级别的日志,只是过滤 info 还是会输出 Error 日志,因为 Error 的级别高, 所以我们使用下面的策略,可以避免输出 Error 的日志-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!--过滤 Error-->
            <level>ERROR</level>
            <!--匹配到就禁止-->
            <onMatch>DENY</onMatch>
            <!--没有匹配到就允许-->
            <onMismatch>ACCEPT</onMismatch>
        </filter>
        <!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天的日志改名为今天的日期。即,<File> 的日志都是当天的。-->
        <!--<File>logs/info.demo-logback.log</File>-->
        <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
            <FileNamePattern>D://barrierLogs/info.created_on_%d{yyyy-MM-dd}.part_%i.log</FileNamePattern>
            <!--只保留最近90天的日志-->
            <maxHistory>90</maxHistory>
            <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
            <!--<totalSizeCap>1GB</totalSizeCap>-->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- maxFileSize:这是活动文件的大小,默认值是10MB,本篇设置为1KB,只是为了演示 -->
                <maxFileSize>2MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!--<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">-->
        <!--<maxFileSize>1KB</maxFileSize>-->
        <!--</triggeringPolicy>-->
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <!--<charset>UTF-8</charset> --><!-- 此处设置字符集 -->
        </encoder>
    </appender>

    <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--如果只是想要 Error 级别的日志,那么需要过滤一下,默认是 info 级别的,ThresholdFilter-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>Error</level>
        </filter>
        <!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天的日志改名为今天的日期。即,<File> 的日志都是当天的。-->
        <!--<File>logs/error.demo-logback.log</File>-->
        <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
            <FileNamePattern>D://barrierLogs/error.created_on_%d{yyyy-MM-dd}.part_%i.log</FileNamePattern>
            <!--只保留最近90天的日志-->
            <maxHistory>90</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- maxFileSize:这是活动文件的大小,默认值是10MB,本篇设置为1KB,只是为了演示 -->
                <maxFileSize>2MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_ERROR_PATTERN}</pattern>
           <!-- <charset>UTF-8</charset> --><!-- 此处设置字符集 -->
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE_INFO"/>
        <appender-ref ref="FILE_ERROR"/>
    </root>
</configuration>

    日志位置在D:\barrierLogs下:

image-20240826150905370

    info日志输出如下所示:

image-20240826151002002

    查看日志可以看出springBoot项目通过打成exe可执行文件启动成功。

10.使用innosetup工具进行二次打包

    第二步有两种实现方案:①使用innosetup工具进行二次打包,将jdk环境一起打包进安装包,实施人员只需要安装运行即可。②将exe4j工具中需要的64或者32位jre复制到可执行程序exe目录下,组合成免安装文件夹

10.1安装innosetup

链接:https://pan.baidu.com/s/1zdvT3R0d45zeZxXUvaCmdA 
提取码:jau7

image-20240826165857297

image-20240826165917501

image-20240826170019700

image-20240826170036673

image-20240826182547771

    这里需要注意的是,需要直接选择如下路径,一次性添加exe4j文件夹,不要单个去加,特别是不要去单个加exe4j下的jre文件,如果单个选择exe4j下的jre文件的话,打出来的exe文件安装目录下解压就没有一个jre文件了,而是jre里面的子文件了,目录层级就不对了,如果安装机子上没有安装java环境的话,点击这个步骤使用innosetup打的exe可执行文件解压之后路径下就没有.\jre的相对路径了,启动应该就找不到java环境了,所以这个是特别要注意的地方:

C:\Users\dy-01\Desktop\exe4j

image-20240826183702563

image-20240826170253342

image-20240826170312691

许可文件直接忽略掉,点击下一步。

image-20240826170335572

    按照需求来选,或者直接默认下一步。

image-20240826170408694

    选择语言中文,下一步。

image-20240826170443029

     默认,下一步。

    编译设置:需要设置编译后文件输出目录及编译文件名称

image-20240826170625587

    默认,下一步。

image-20240826170700846

     最后点击完成。

image-20240826170718875

    立即编辑即可。

image-20240826170831580

image-20240826170901178

image-20240826171218953

10.2编译后exe文件安装界面乱码解决

    编译后执行exe文件安装界面乱码解决:

https://www.cnblogs.com/lvye1221/p/18037358
https://jrsoftware.org/files/istrans/
https://blog.csdn.net/weixin_54227557/article/details/124437626
https://www.sci.dog/?p=1377

    在D:\Inno Setup 6\安装径下新增Chinese.isl文件

image-20240826175257730

    新建Chinese.isl复制粘贴如下内容:

; *** Inno Setup version 6.1.0+ Chinese Simplified messages ***
;
; To download user-contributed translations of this file, go to:
;   https://jrsoftware.org/files/istrans/
;
; Note: When translating this text, do not add periods (.) to the end of
; messages that didn't have them already, because on those messages Inno
; Setup adds the periods automatically (appending a period would result in
; two periods being displayed).
;
; Maintained by Zhenghan Yang
; Email: [email protected]
; Translation based on network resource
; The latest Translation is on https://github.com/kira-96/Inno-Setup-Chinese-Simplified-Translation
;

[LangOptions]
; The following three entries are very important. Be sure to read and 
; understand the '[LangOptions] section' topic in the help file.
LanguageName=简体中文
; If Language Name display incorrect, uncomment next line
; LanguageName=<7B80><4F53><4E2D><6587>
; About LanguageID, to reference link:
; https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-lcid/a9eac961-e77d-41a6-90a5-ce1a8b0cdb9c
LanguageID=$0804
LanguageCodePage=936
; If the language you are translating to requires special font faces or
; sizes, uncomment any of the following entries and change them accordingly.
DialogFontName=Microsoft YaHei UI
;DialogFontSize=8
WelcomeFontName=Microsoft YaHei UI
;WelcomeFontSize=12
TitleFontName=Microsoft YaHei UI
;TitleFontSize=29
;CopyrightFontName=Arial
;CopyrightFontSize=8

[Messages]

; *** 应用程序标题
SetupAppTitle=安装
SetupWindowTitle=安装 - %1
UninstallAppTitle=卸载
UninstallAppFullTitle=%1 卸载

; *** Misc. common
InformationTitle=信息
ConfirmTitle=确认
ErrorTitle=错误

; *** SetupLdr messages
SetupLdrStartupMessage=现在将安装 %1。您想要继续吗?
LdrCannotCreateTemp=不能创建临时文件。安装中断。
LdrCannotExecTemp=不能执行临时目录中的文件。安装中断。
HelpTextNote=

; *** 启动错误消息
LastErrorMessage=%1.%n%n错误 %2: %3
SetupFileMissing=安装目录中的文件 %1 丢失。请修正这个问题或者获取程序的新副本。
SetupFileCorrupt=安装文件已损坏。请获取程序的新副本。
SetupFileCorruptOrWrongVer=安装文件已损坏,或是与这个安装程序的版本不兼容。请修正这个问题或获取新的程序副本。
InvalidParameter=无效的命令行参数:%n%n%1
SetupAlreadyRunning=安装程序正在运行。
WindowsVersionNotSupported=这个程序不支持当前计算机运行的 Windows 版本。
WindowsServicePackRequired=这个程序需要 %1 服务包 %2 或更高。
NotOnThisPlatform=这个程序将不能运行于 %1。
OnlyOnThisPlatform=这个程序必须运行于 %1。
OnlyOnTheseArchitectures=这个程序只能在为下列处理器架构的 Windows 版本中进行安装:%n%n%1
WinVersionTooLowError=这个程序需要 %1 版本 %2 或更高。
WinVersionTooHighError=这个程序不能安装于 %1 版本 %2 或更高。
AdminPrivilegesRequired=在安装这个程序时您必须以管理员身份登录。
PowerUserPrivilegesRequired=在安装这个程序时您必须以管理员身份或有权限的用户组身份登录。
SetupAppRunningError=安装程序发现 %1 当前正在运行。%n%n请先关闭所有运行的窗口,然后点击“确定”继续,或按“取消”退出。
UninstallAppRunningError=卸载程序发现 %1 当前正在运行。%n%n请先关闭所有运行的窗口,然后点击“确定”继续,或按“取消”退出。

; *** 启动问题
PrivilegesRequiredOverrideTitle=选择安装程序模式
PrivilegesRequiredOverrideInstruction=选择安装模式
PrivilegesRequiredOverrideText1=%1 可以为所有用户安装(需要管理员权限),或仅为您安装。
PrivilegesRequiredOverrideText2=%1 只能为您安装,或为所有用户安装(需要管理员权限)。
PrivilegesRequiredOverrideAllUsers=为所有用户安装(&A)
PrivilegesRequiredOverrideAllUsersRecommended=为所有用户安装(&A) (建议选项)
PrivilegesRequiredOverrideCurrentUser=仅为我安装(&M)
PrivilegesRequiredOverrideCurrentUserRecommended=仅为我安装(&M) (建议选项)

; *** 其它错误
ErrorCreatingDir=安装程序不能创建目录“%1”。
ErrorTooManyFilesInDir=不能在目录“%1”中创建文件,因为里面的文件太多

; *** 安装程序公共消息
ExitSetupTitle=退出安装程序
ExitSetupMessage=安装程序尚未完成安装。如果您现在退出,程序将不能安装。%n%n您可以以后再运行安装程序完成安装。%n%n现在退出安装程序吗?
AboutSetupMenuItem=关于安装程序(&A)...
AboutSetupTitle=关于安装程序
AboutSetupMessage=%1 版本 %2%n%3%n%n%1 主页:%n%4
AboutSetupNote=
TranslatorNote=Translated by Zhenghan Yang.

; *** 按钮
ButtonBack=< 上一步(&B)
ButtonNext=下一步(&N) >
ButtonInstall=安装(&I)
ButtonOK=确定
ButtonCancel=取消
ButtonYes=是(&Y)
ButtonYesToAll=全是(&A)
ButtonNo=否(&N)
ButtonNoToAll=全否(&O)
ButtonFinish=完成(&F)
ButtonBrowse=浏览(&B)...
ButtonWizardBrowse=浏览(&R)...
ButtonNewFolder=新建文件夹(&M)

; *** “选择语言”对话框消息
SelectLanguageTitle=选择安装语言
SelectLanguageLabel=选择安装时要使用的语言。

; *** 公共向导文字
ClickNext=点击“下一步”继续,或点击“取消”退出安装程序。
BeveledLabel=
BrowseDialogTitle=浏览文件夹
BrowseDialogLabel=在下列列表中选择一个文件夹,然后点击“确定”。
NewFolderName=新建文件夹

; *** “欢迎”向导页
WelcomeLabel1=欢迎使用 [name] 安装向导
WelcomeLabel2=现在将安装 [name/ver] 到您的电脑中。%n%n推荐您在继续安装前关闭所有其它应用程序。

; *** “密码”向导页
WizardPassword=密码
PasswordLabel1=这个安装程序有密码保护。
PasswordLabel3=请输入密码,然后点击“下一步”继续。密码区分大小写。
PasswordEditLabel=密码(&P):
IncorrectPassword=您所输入的密码不正确,请重试。

; *** “许可协议”向导页
WizardLicense=许可协议
LicenseLabel=继续安装前请阅读下列重要信息。
LicenseLabel3=请仔细阅读下列许可协议。您在继续安装前必须同意这些协议条款。
LicenseAccepted=我同意此协议(&A)
LicenseNotAccepted=我拒绝此协议(&D)

; *** “信息”向导页
WizardInfoBefore=信息
InfoBeforeLabel=请在继续安装前阅读下列重要信息。
InfoBeforeClickLabel=如果您想继续安装,点击“下一步”。
WizardInfoAfter=信息
InfoAfterLabel=请在继续安装前阅读下列重要信息。
InfoAfterClickLabel=如果您想继续安装,点击“下一步”。

; *** “用户信息”向导页
WizardUserInfo=用户信息
UserInfoDesc=请输入您的信息。
UserInfoName=用户名(&U):
UserInfoOrg=组织(&O):
UserInfoSerial=序列号(&S):
UserInfoNameRequired=您必须输入用户名。

; *** “选择目标目录”向导页
WizardSelectDir=选择目标位置
SelectDirDesc=您想将 [name] 安装在哪里?
SelectDirLabel3=安装程序将安装 [name] 到下列文件夹中。
SelectDirBrowseLabel=点击“下一步”继续。如果您想选择其它文件夹,点击“浏览”。
DiskSpaceGBLabel=至少需要有 [gb] GB 的可用磁盘空间。
DiskSpaceMBLabel=至少需要有 [mb] MB 的可用磁盘空间。
CannotInstallToNetworkDrive=安装程序无法安装到一个网络驱动器。
CannotInstallToUNCPath=安装程序无法安装到一个UNC路径。
InvalidPath=您必须输入一个带驱动器卷标的完整路径,例如:%n%nC:\APP%n%n或下列形式的UNC路径:%n%n\\server\share
InvalidDrive=您选定的驱动器或 UNC 共享不存在或不能访问。请选选择其它位置。
DiskSpaceWarningTitle=没有足够的磁盘空间
DiskSpaceWarning=安装程序至少需要 %1 KB 的可用空间才能安装,但选定驱动器只有 %2 KB 的可用空间。%n%n您一定要继续吗?
DirNameTooLong=文件夹名称或路径太长。
InvalidDirName=文件夹名称无效。
BadDirName32=文件夹名称不能包含下列任何字符:%n%n%1
DirExistsTitle=文件夹已存在
DirExists=文件夹:%n%n%1%n%n已经存在。您一定要安装到这个文件夹中吗?
DirDoesntExistTitle=文件夹不存在
DirDoesntExist=文件夹:%n%n%1%n%n不存在。您想要创建此文件夹吗?

; *** “选择组件”向导页
WizardSelectComponents=选择组件
SelectComponentsDesc=您想安装哪些程序的组件?
SelectComponentsLabel2=选择您想要安装的组件;清除您不想安装的组件。然后点击“下一步”继续。
FullInstallation=完全安装
; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
CompactInstallation=简洁安装
CustomInstallation=自定义安装
NoUninstallWarningTitle=组件已存在
NoUninstallWarning=安装程序检测到下列组件已在您的电脑中安装:%n%n%1%n%n取消选定这些组件将不能卸载它们。%n%n您一定要继续吗?
ComponentSize1=%1 KB
ComponentSize2=%1 MB
ComponentsDiskSpaceGBLabel=当前选择的组件至少需要 [gb] GB 的磁盘空间。
ComponentsDiskSpaceMBLabel=当前选择的组件至少需要 [mb] MB 的磁盘空间。

; *** “选择附加任务”向导页
WizardSelectTasks=选择附加任务
SelectTasksDesc=您想要安装程序执行哪些附加任务?
SelectTasksLabel2=选择您想要安装程序在安装 [name] 时执行的附加任务,然后点击“下一步”。

; *** “选择开始菜单文件夹”向导页
WizardSelectProgramGroup=选择开始菜单文件夹
SelectStartMenuFolderDesc=安装程序应该在哪里放置程序的快捷方式?
SelectStartMenuFolderLabel3=安装程序现在将在下列开始菜单文件夹中创建程序的快捷方式。
SelectStartMenuFolderBrowseLabel=点击“下一步”继续。如果您想选择其它文件夹,点击“浏览”。
MustEnterGroupName=您必须输入一个文件夹名。
GroupNameTooLong=文件夹名或路径太长。
InvalidGroupName=文件夹名无效。
BadGroupName=文件夹名不能包含下列任何字符:%n%n%1
NoProgramGroupCheck2=不创建开始菜单文件夹(&D)

; *** “准备安装”向导页
WizardReady=准备安装
ReadyLabel1=安装程序现在准备开始安装 [name] 到您的电脑中。
ReadyLabel2a=点击“安装”继续此安装程序。如果您想要回顾或修改设置,请点击“上一步”。
ReadyLabel2b=点击“安装”继续此安装程序?
ReadyMemoUserInfo=用户信息:
ReadyMemoDir=目标位置:
ReadyMemoType=安装类型:
ReadyMemoComponents=选定组件:
ReadyMemoGroup=开始菜单文件夹:
ReadyMemoTasks=附加任务:

; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
DownloadingLabel=正在下载附加文件...
ButtonStopDownload=停止下载(&S)
StopDownload=您确定要停止下载吗?
ErrorDownloadAborted=下载已中止
ErrorDownloadFailed=下载失败:%1 %2
ErrorDownloadSizeFailed=获取下载大小失败:%1 %2
ErrorFileHash1=校验文件哈希失败:%1
ErrorFileHash2=无效的文件哈希:预期为 %1,实际为 %2
ErrorProgress=无效的进度:%1,总共%2
ErrorFileSize=文件大小错误:预期为 %1,实际为 %2

; *** “正在准备安装”向导页
WizardPreparing=正在准备安装
PreparingDesc=安装程序正在准备安装 [name] 到您的电脑中。
PreviousInstallNotCompleted=先前程序的安装/卸载未完成。您需要重新启动您的电脑才能完成安装。%n%n在重新启动电脑后,再运行安装完成 [name] 的安装。
CannotContinue=安装程序不能继续。请点击“取消”退出。
ApplicationsFound=下列应用程序正在使用的文件需要更新设置。它是建议您允许安装程序自动关闭这些应用程序。
ApplicationsFound2=下列应用程序正在使用的文件需要更新设置。它是建议您允许安装程序自动关闭这些应用程序。安装完成后,安装程序将尝试重新启动应用程序。
CloseApplications=自动关闭该应用程序(&A)
DontCloseApplications=不要关闭该应用程序(&D)
ErrorCloseApplications=安装程序无法自动关闭所有应用程序。在继续之前,我们建议您关闭所有使用需要更新的安装程序文件。
PrepareToInstallNeedsRestart=安装程序必须重新启动计算机。重新启动计算机后,请再次运行安装程序以完成 [name] 的安装。%n%n是否立即重新启动?

; *** “正在安装”向导页
WizardInstalling=正在安装
InstallingLabel=安装程序正在安装 [name] 到您的电脑中,请稍等。

; *** “安装完成”向导页
FinishedHeadingLabel=[name] 安装完成
FinishedLabelNoIcons=安装程序已在您的电脑中安装了 [name]。
FinishedLabel=安装程序已在您的电脑中安装了 [name]。此应用程序可以通过选择安装的快捷方式运行。
ClickFinish=点击“完成”退出安装程序。
FinishedRestartLabel=要完成 [name] 的安装,安装程序必须重新启动您的电脑。您想要立即重新启动吗?
FinishedRestartMessage=要完成 [name] 的安装,安装程序必须重新启动您的电脑。%n%n您想要立即重新启动吗?
ShowReadmeCheck=是,我想查阅自述文件
YesRadio=是,立即重新启动电脑(&Y)
NoRadio=否,稍后重新启动电脑(&N)
; used for example as 'Run MyProg.exe'
RunEntryExec=运行 %1
; used for example as 'View Readme.txt'
RunEntryShellExec=查阅 %1

; *** “安装程序需要下一张磁盘”提示
ChangeDiskTitle=安装程序需要下一张磁盘
SelectDiskLabel2=请插入磁盘 %1 并点击“确定”。%n%n如果这个磁盘中的文件可以在下列文件夹之外的文件夹中找到,请输入正确的路径或点击“浏览”。
PathLabel=路径(&P):
FileNotInDir2=文件“%1”不能在“%2”定位。请插入正确的磁盘或选择其它文件夹。
SelectDirectoryLabel=请指定下一张磁盘的位置。

; *** 安装状态消息
SetupAborted=安装程序未完成安装。%n%n请修正这个问题并重新运行安装程序。
AbortRetryIgnoreSelectAction=选择操作
AbortRetryIgnoreRetry=重试(&T)
AbortRetryIgnoreIgnore=忽略错误并继续(&I)
AbortRetryIgnoreCancel=关闭安装程序

; *** 安装状态消息
StatusClosingApplications=正在关闭应用程序...
StatusCreateDirs=正在创建目录...
StatusExtractFiles=正在解压缩文件...
StatusCreateIcons=正在创建快捷方式...
StatusCreateIniEntries=正在创建 INI 条目...
StatusCreateRegistryEntries=正在创建注册表条目...
StatusRegisterFiles=正在注册文件...
StatusSavingUninstall=正在保存卸载信息...
StatusRunProgram=正在完成安装...
StatusRestartingApplications=正在重启应用程序...
StatusRollback=正在撤销更改...

; *** 其它错误
ErrorInternal2=内部错误:%1
ErrorFunctionFailedNoCode=%1 失败
ErrorFunctionFailed=%1 失败;错误代码 %2
ErrorFunctionFailedWithMessage=%1 失败;错误代码 %2.%n%3
ErrorExecutingProgram=不能执行文件:%n%1

; *** 注册表错误
ErrorRegOpenKey=打开注册表项时出错:%n%1\%2
ErrorRegCreateKey=创建注册表项时出错:%n%1\%2
ErrorRegWriteKey=写入注册表项时出错:%n%1\%2

; *** INI 错误
ErrorIniEntry=在文件“%1”中创建INI条目时出错。

; *** 文件复制错误
FileAbortRetryIgnoreSkipNotRecommended=跳过这个文件(&S) (不推荐)
FileAbortRetryIgnoreIgnoreNotRecommended=忽略错误并继续(&I) (不推荐)
SourceIsCorrupted=源文件已损坏
SourceDoesntExist=源文件“%1”不存在
ExistingFileReadOnly2=无法替换现有文件,因为它是只读的。
ExistingFileReadOnlyRetry=移除只读属性并重试(&R)
ExistingFileReadOnlyKeepExisting=保留现有文件(&K)
ErrorReadingExistingDest=尝试读取现有文件时出错:
FileExistsSelectAction=选择操作
FileExists2=文件已经存在。
FileExistsOverwriteExisting=覆盖已经存在的文件(&O)
FileExistsKeepExisting=保留现有的文件(&K)
FileExistsOverwriteOrKeepAll=为所有的冲突文件执行此操作(&D)
ExistingFileNewerSelectAction=选择操作
ExistingFileNewer2=现有的文件比安装程序将要安装的文件更新。
ExistingFileNewerOverwriteExisting=覆盖已经存在的文件(&O)
ExistingFileNewerKeepExisting=保留现有的文件(&K) (推荐)
ExistingFileNewerOverwriteOrKeepAll=为所有的冲突文件执行此操作(&D)
ErrorChangingAttr=尝试改变下列现有的文件的属性时出错:
ErrorCreatingTemp=尝试在目标目录创建文件时出错:
ErrorReadingSource=尝试读取下列源文件时出错:
ErrorCopying=尝试复制下列文件时出错:
ErrorReplacingExistingFile=尝试替换现有的文件时出错:
ErrorRestartReplace=重新启动替换失败:
ErrorRenamingTemp=尝试重新命名以下目标目录中的一个文件时出错:
ErrorRegisterServer=无法注册 DLL/OCX:%1
ErrorRegSvr32Failed=RegSvr32 失败;退出代码 %1
ErrorRegisterTypeLib=无法注册类型库:%1

; *** 卸载显示名字标记
; used for example as 'My Program (32-bit)'
UninstallDisplayNameMark=%1 (%2)
; used for example as 'My Program (32-bit, All users)'
UninstallDisplayNameMarks=%1 (%2, %3)
UninstallDisplayNameMark32Bit=32位
UninstallDisplayNameMark64Bit=64位
UninstallDisplayNameMarkAllUsers=所有用户
UninstallDisplayNameMarkCurrentUser=当前用户

; *** 安装后错误
ErrorOpeningReadme=尝试打开自述文件时出错。
ErrorRestartingComputer=安装程序不能重新启动电脑,请手动重启。

; *** 卸载消息
UninstallNotFound=文件“%1”不存在。无法卸载。
UninstallOpenError=文件“%1”不能打开。无法卸载。
UninstallUnsupportedVer=此版本的卸载程序无法识别卸载日志文件“%1”的格式。无法卸载
UninstallUnknownEntry=在卸载日志中遇到一个未知的条目 (%1)
ConfirmUninstall=您确认想要完全删除 %1 及它的所有组件吗?
UninstallOnlyOnWin64=这个安装程序只能在64位Windows中进行卸载。
OnlyAdminCanUninstall=这个安装的程序需要有管理员权限的用户才能卸载。
UninstallStatusLabel=正在从您的电脑中删除 %1,请稍等。
UninstalledAll=%1 已顺利地从您的电脑中删除。
UninstalledMost=%1 卸载完成。%n%n有一些内容无法被删除。您可以手动删除它们。
UninstalledAndNeedsRestart=要完成 %1 的卸载,您的电脑必须重新启动。%n%n您想立即重新启动电脑吗?
UninstallDataCorrupted=文件“%1”已损坏,无法卸载

; *** 卸载状态消息
ConfirmDeleteSharedFileTitle=删除共享文件吗?
ConfirmDeleteSharedFile2=系统中包含的下列共享文件已经不再被其它程序使用。您想要卸载程序删除这些共享文件吗?%n%n如果这些文件被删除,但还有程序正在使用这些文件,这些程序可能不能正确执行。如果您不能确定,选择“否”。把这些文件保留在系统中以免引起问题。
SharedFileNameLabel=文件名:
SharedFileLocationLabel=位置:
WizardUninstalling=卸载状态
StatusUninstalling=正在卸载 %1...

; *** Shutdown block reasons
ShutdownBlockReasonInstallingApp=正在安装 %1。
ShutdownBlockReasonUninstallingApp=正在卸载 %1。

; The custom messages below aren't used by Setup itself, but if you make
; use of them in your scripts, you'll want to translate them.

[CustomMessages]

NameAndVersion=%1 版本 %2
AdditionalIcons=附加快捷方式:
CreateDesktopIcon=创建桌面快捷方式(&D)
CreateQuickLaunchIcon=创建快速运行栏快捷方式(&Q)
ProgramOnTheWeb=%1 网站
UninstallProgram=卸载 %1
LaunchProgram=运行 %1
AssocFileExtension=将 %2 文件扩展名与 %1 建立关联(&A)
AssocingFileExtension=正在将 %2 文件扩展名与 %1 建立关联...
AutoStartProgramGroupDescription=启动组:
AutoStartProgram=自动启动 %1
AddonHostProgramNotFound=%1无法找到您所选择的文件夹。%n%n您想要继续吗?

    Chinese.isl文件打开编码需要使用UTF-8-BOM的编码复制粘贴保存重启启动软件加载脚本编译之后的exe文件点击安装界面才不会有乱码的,Chinese.isl文件内容可以使用官方的ChineseSimplified.isl内容,只不过需要注意的是文件打开之后的编码需要设置为:UTF-8-BOM的编码,否则使用功上面博客中的语言包或者是官方的ChineseSimplified.isl官方下载语言包文件格式没有设置为:UTF-8-BOM的编码,编译之后点击安装界面会是乱码的,所以需要注意这个很坑的地方,

https://raw.githubusercontent.com/jrsoftware/issrc/main/Files/Languages/Unofficial/ChineseSimplified.isl

image-20240826180900330

    脚本需要修改的地方:

[Languages]
Name: "Chinese"; MessagesFile: "compiler:Chinese.isl"

image-20240826175412460

10.3 安装及验证

    点击安装:

image-20240826181516272

    下一步:

image-20240826181541763

    点击完成

image-20240826181616132

    安装解压路基文件如下:

image-20240826183048648

    桌面快捷方式:

image-20240826183149283

    这个图标是默认的,也可以自定义

    启动运行程序:

image-20240826183425466

    barrier-exe启动会去查注册表中是否有java环境配置,或者去查JAVA_HOME的环境变量配置,或者查当前路径下是否有一个jre的文件路径(也就是上面配置的.\jre)。

    查看java进程及日志:

image-20240826183543044

    java进程:

image-20240826183558765

11.总结

    由于之前搞了一个windwos的java应用程序使用的部署在windwos10的机器上,需要先安装配置java环境程序包解压如图所示:

image-20240826153854716

    barrier.bat的脚本如下:

cd /d D:/barrier
java -jar barrier.jar 102  -Xms1024m -Xmx1024m -server -XX:PermSize=512M -XX:MaxPermSize=1024m -XX:+PrintGCDetails -XX:+UseG1GC
exit

    barrier.vbs的脚本如下:使用这个barrier.vbs调用了barrier.bat的脚本

createobject("wscript.shell").run"D:\barrier\barrier.bat"

    通过执行barrier.bat或着点击barrier.vbs(或快捷方式)或启动一个cmd的命令行窗口,运行脚本启动了一个cmd的命令行窗口,这种启动方式很丑陋,并且很容易被人点了关闭了,所以一点也不方便和友好。

image-20240826154521047

    所以我才想能能打包成exe的可执行文件直接点击运行,这种岂不是非常的方便友好优雅,于是我就摸索了使用exe4将springBoot程序打包成exe的可执行的文件,终端上的windwos已经安装了JDK的java环境,所以只需要使用exe4j将springBoot应用打包成exe可执行文件就可以拿去部署了,不在需要使用Inno Setup 6进行二次打包了,打包springBoot应用为exe可执行的文件方法还有很多,比如使用:【JDK14以上可以使用JDK自带的jpackage打包】–由于终端项目使用的是JDK8所以这种方式搞不了:

https://zhuanlan.zhihu.com/p/618593068

    或者是使用【Launch4j】和【Jsmooth】、或者是使用【launch4j-maven-plugin的maven插件】等或者其它的什么方式,其它方式我还没有尝试的,网上基本上是这几种思路和方法,可以多百度几篇文章看看,然后去摸索尝试一下,也很简单。

    参考文章如下:

https://zhuanlan.zhihu.com/p/618593068
https://blog.csdn.net/hanwang2008/article/details/140710426
https://blog.csdn.net/zxc88546/article/details/126767821
https://blog.csdn.net/ca1m0921/article/details/106072792
https://blog.csdn.net/qq_42796149/article/details/131303127?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-131303127-blog-140013305.235^v43^pc_blog_bottom_relevance_base3&spm=1001.2101.3001.4242.1&utm_relevant_index=3
https://blog.51cto.com/lwc0329/5000984
https://blog.csdn.net/qq_43112019/article/details/135692908
https://blog.csdn.net/weixin_52001174/article/details/140473550
https://blog.csdn.net/zhang_dianliang/article/details/140168998
https://blog.csdn.net/qq_30272167/article/details/134100311

    到此,本次分享已经结束,希望我的分享能给你启发和帮助,请一键三连,么么么哒!

标签:文件,exe,springBoot,n%,文件夹,安装程序,安装,可执行程序
From: https://blog.csdn.net/qq_34905631/article/details/141608705

相关文章

  • Java语言-SpringBoot框架-充电桩管理系统+充电桩平台+充电桩+充电桩系统源码
    Java语言-SpringBoot框架-充电桩管理系统+充电桩平台+充电桩+充电桩系统源码####简述SpringBoot框架,充电桩平台+充电桩系统+充电平台+充电桩+互联互通协议+云快充协议1.5-云快充1.6协议+新能源汽车+电动自行车+公交车-四轮车充电+充电源代码+充电平台源码+Java源码+无加密项......
  • Springboot计算机毕业设计面向影视人群的特色推荐系统2o9bg
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,影视信息,影视分类开题报告内容一、课题的目的与意义1.1目的随着互联网技术的飞速发展和数字娱乐产业的蓬勃兴起,电影作为一种重要的文化消费形式,其产量......
  • Springboot计算机毕业设计民宿管理系统97t5r
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表会员,民宿客房,民宿风格,关于我们,民宿预定,预定取消开题报告内容一、引言随着旅游业的蓬勃发展和消费者个性化需求的增加,民宿作为一种新兴的旅游住宿方式,以其......
  • Springboot计算机毕业设计面向社区的洗衣店智能服务系统设计与实现808ub
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,设备信息,洗衣服务,用户下单,上门预约,送衣信息,上门取件,洗衣常识,优惠活动,洗衣分配,会员卡,会员等级,会员卡购买开题报告内容计算机毕业设计面向社区的......
  • 移动端+PC端源码,智慧城管执法系统,后端框架:springboot,移动端:uniapp
    市管理综合执法管理平台实现执法办案、业务全流程在线办理,依托移动端+PC端的“两端”应用模式,保障能够通过信息化手段进行日常的执法办案工作,强化执法监督功能。提供了案件在线办理、当事人信用管理、文书电子送达、沿街店铺分析等功能,全面赋能执法队员,提高执法队员办案效率。......
  • springboot+vue基于青少年篮球俱乐部管理系统设计与实现【程序+论文+开题】-计算机毕
    系统程序文件列表开题报告内容研究背景随着青少年体育运动的蓬勃发展,篮球作为一项广受欢迎的体育项目,其俱乐部数量在全国范围内迅速增长。然而,传统的管理方式往往依赖于人工记录和纸质文档,不仅效率低下,还容易出错,难以满足俱乐部日常运营中运动员信息管理、比赛组织、报名流......
  • springboot+vue基于驾校信息管理系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着社会的快速发展和汽车保有量的持续增长,驾驶技能已成为现代人不可或缺的生活技能之一。驾校作为培养驾驶员的重要机构,其管理模式与效率直接影响到学员的学习体验与培训质量。传统驾校管理模式存在信息不透明、流程繁琐、资源分配不......
  • springboot+vue基于大学生考研服务系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着高等教育的普及和就业竞争的日益激烈,越来越多的大学生选择继续深造,通过研究生入学考试(简称考研)来提升自己的学术水平和职业竞争力。然而,考研之路并非坦途,它要求考生不仅要有扎实的专业知识,还需具备高效的学习方法和良好的备考策略......
  • springboot+vue基于超市会员积分管理系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着零售行业的快速发展与数字化转型的深入,超市作为消费者日常购物的重要场所,其管理模式和服务水平直接影响着顾客满意度与忠诚度。在众多提升顾客忠诚度的策略中,会员积分管理系统凭借其个性化、差异化的服务优势,逐渐成为超市吸引并留......
  • 免费【2024】springboot 基于Bs模式的城市公交查询系统的设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......