好久好久沒(méi)有更新了。不多提,寫點(diǎn)好玩的。
最近發(fā)現(xiàn)了一個(gè)打包工具,可以將war/jar 包應(yīng)用打包成exe安裝文件。當(dāng)然市面上還有installanywhere,種種原因吧。這款工具比較輕量級(jí)。
當(dāng)我們想把一個(gè)應(yīng)用快速的部署到客戶機(jī)或者服務(wù)器上,或者分享給別人時(shí),如果對(duì)方對(duì)軟件不了解,或者對(duì)系統(tǒng)各個(gè)依賴也不知道的話,運(yùn)維部署系統(tǒng)確實(shí)比價(jià)麻煩。
innoSetup工具可以將系統(tǒng)依賴的東西都打包在一起。如下方的代碼中我把系統(tǒng)依賴的jdk,數(shù)據(jù)庫(kù)mysql以及運(yùn)行需要的war和數(shù)據(jù)庫(kù)初始腳本都放在一起,用戶拿到exe文件,直接就像安裝軟件一樣,將系統(tǒng)部署到了自己的機(jī)器上了。還是比較絲滑的。
我的啟動(dòng)那個(gè)腳本呢,就是把相關(guān)的環(huán)境變量設(shè)為系統(tǒng)的,然后拉起mysql服務(wù),并通過(guò)java -jar xxx.war 來(lái)啟動(dòng)我的應(yīng)用。

image.png

Snipaste_2022-04-11_17-23-09.png
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "jxc"
#define MyAppVersion "1.0"
#define MyAppPublisher "jaymz, Inc."
#define MyAppURL "https://www.example.com/"
#define MyAppExeName "install.bat"
#define MyAppAssocName MyAppName + " File"
#define MyAppAssocExt ".myp"
#define MyAppAssocKey StringChange(MyAppAssocName, " ", "") + MyAppAssocExt
#define MyJreName "jdk"
#define MySQLName "mysql"
[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={{E3633164-5F50-4EB0-AF6A-BD87D7E701B9}
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=admin
OutputDir=C:\jaymz
OutputBaseFilename=jxc
Compression=lzma
SolidCompression=yes
WizardStyle=modern
;PrivilegesRequired=poweruser
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "C:\Users\jaymz\Desktop\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files\Java\jdk1.8.0_181\*"; DestDir: "{app}\{#MyJreName}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "C:\project\jaymz\jxc\mysql-8.0.26-winx64\*"; DestDir: "{app}\{#MySQLName}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "C:\project\JXC\target\JXC.war"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\project\jaymz\jxc\icon.png"; DestDir: "{app}"; Flags: ignoreversion
; Source: "C:\project\JXC\db_jxc.sql"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Registry]
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: ""
[Icons]
Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\icon.png"
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\icon.png"; Tasks: desktopicon
[Dirs]
Name: {app}; Permissions: users-full
[Run]
Filename: "{app}\{#MyAppExeName}"; Flags: nowait postinstall skipifsilent shellexec
啟動(dòng)腳本
@echo off
title jxc software is installing
color 0a
echo setting install in environment...
setx /M JAVA_HOME "%~dp0%jdk"
setx /M MYSQL_HOME "%~dp0%mysql-8.0.26-winx64"
setx /M CLASS_PATH ".;%%JAVA_HOME%%\lib;"
setx /M PATH "%PATH%;%%JAVA_HOME%%\bin;%%MYSQL_HOME%%\bin;"
echo environment variables have been configed successfully.
cd "%~dp0%"
echo start to install database
cd mysql
bin\mysqld.exe --initialize-insecure
bin\mysqld.exe -install MySQL1.8
net start MySQL1.8
sc config MySQL1.8 start= auto
echo database start...
ping -n 3 127.1>nul
echo initial the database...
bin\mysqladmin.exe -u root password xxxx
echo initial data in database
bin\mysql.exe -u root -pxxx < db_jxc.sql
echo database has been initial completed
cd ..
echo start application....
set "JAVA_HOME=%~dp0%jdk"
call java -jar xxx.war
echo started...
echo access localhost:8086 to land the service
pause