阅读 625

使用InnoSetUp打包Springboot开发项目

项目需求:BS项目能够一键安装在没有配置环境下运行。

考虑使用exe4j将Springboot开发的jar包和jre环境进行打包成exe,之后再通过InnoSetUp打包。

  • 准备jar包及jre文件夹

  • 使用exe4j-jar包生成exe

image.png

  • 填写基本信息程序名以及输出程序的路径

image.png

  • 程序基本配置,因为这里是一个Springboot程序没有图形界面所以选择输出类型Console application

image.png

  • 选择jar包和项目主入口

image.png

  • 选择jre,防止安装电脑上没有jre环境,使用自定义jre进行运行,提供jre

image.png

image.png

  • 一直finish到结尾

image.png

  • 查看exe是否可以正常运行

Inno SetUp脚本

  • 遇到的坑

  1. 注意jre的目录,Source中如果在界面配置时没有选择子目录会出现问题,如果是在子目录下应为DestDir: "{app}\jre";

  2. 在注册表中配置开机自启,但是SOFTWARE\Microsoft\Windows\CurrentVersion\Run下没找到配置的key,是因为32位程序会在\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run下

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

#define MyAppName "程序名"
#define MyAppVersion "版本"
#define MyAppPublisher "发布者信息"
#define MyAppURL "发布者信息网址"
#define MyAppExeName "执行程序.exe"
#define MyAppAssocName MyAppName + " File"
#define MyAppAssocExt ".myp"
#define MyAppAssocKey StringChange(MyAppAssocName, " ", "") + MyAppAssocExt

[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=自动生成
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={autopf}\{#MyAppName}
ChangesAssociations=yes
DisableProgramGroupPage=yes
; Uncomment the following line to run in non administrative install mode (install for current user only.)
;PrivilegesRequired=lowest
OutputDir=输出文件夹
Compression=lzma
SolidCompression=yes
WizardStyle=modern
ShowLanguageDialog=yes

[Languages]
;下载ChineseSimplified.isl,放在Inno SetUp languages文件夹下=下载地址https://github.com/kira-96/Inno-Setup-Chinese-Simplified-Translation
Name: "cs"; MessagesFile: "compiler:Languages\ChineseSimplified.isl"
Name: "english"; MessagesFile: "compiler:Default.isl"
 
[Components]
Name: main;Description:"主程序(必选)";Types:full compact custom;Flags:fixed
Name: data;Description:"数据文件";Types:full
Name: helpo;Description:"帮助文件";Types:full

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
;Source: "D:\workstation\exe4j打包目录\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion;Components:main
Source: "D:\workstation\exe4j打包目录\需要的文件.exe"; DestDir: "{app}"; Flags: ignoreversion;Components:main
Source: "D:\workstation\exe4j打包目录\需要的文件.jar"; DestDir: "{app}"; Flags: ignoreversion;Components:main
Source: "D:\workstation\exe4j打包目录\jre\*"; DestDir: "{app}\jre"; Flags: ignoreversion recursesubdirs createallsubdirs; Components:main
Source: "D:\workstation\exe4j打包目录\readme.txt"; DestDir: "{app}"; Flags: isreadme
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Registry]
;HKCR(HKEY_CLASSES_ROOT)
;HKCU(HKEY_CURRENT_USER)
;HKLM(HKEY_LOCAL_MACHINE)
;HKU(HKEY_USERS)
;HKCC(HKEY_CURRENT_CONFIG)
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocExt}\OpenWithProgids"; ValueType: string; ValueName: "{#MyAppAssocKey}"; ValueData: ""; Flags: uninsdeletevalue
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocKey}"; ValueType: string; ValueName: ""; ValueData: "{#MyAppAssocName}"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocKey}\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#MyAppExeName},0"
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocKey}\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#MyAppExeName}"" ""%1"""
Root: HKA; Subkey: "Software\Classes\Applications\{#MyAppExeName}\SupportedTypes"; ValueType: string; ValueName: ".myp"; ValueData: ""
;Root: HKLM;Subkey: SOFTWARE\Microsoft\Windows\CurrentVersion\Run;ValueType: string; ValueName:想在注册表中的名称;ValueData:{app}\{#MyAppExeName}.exe;Flags: uninsdeletevalue
;\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run
;wow https://blog.csdn.net/yandede/article/details/12711739
Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"; ValueType: string; ValueName: "想在注册表中的名称"; ValueData: "{app}\{#MyAppExeName}" 

  
[Icons]
Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[dirs]
Name:"{app}\帮助文件";Components:helpo

[Messages]
BeveledLabel=安装界面中左下角显示名称

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent runhidden复制代码

但是以上配置会出现个问题,每次运行的时候都会出现命令行窗口运行,并且关闭后服务就停止运行了,这不是想要的结果。本来想通过vbs解决后台运行的问题。但是64bit电脑运行32bit的vbs一直没解决。双击运行可以,但是通过InnoSetUp启动时会出现错误。因此考虑还是使用Windows服务的方式实现。下一张将记录Windows服务配置方式。

还是附上vbs后台运行exe的脚本,路径支持相对路径

Set WS=CreateObject("WScript.Shell")
WS.Run "需要的文件.exe",0


作者:好听麻薯
链接:https://juejin.cn/post/7023212428242452517


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐