使用Inno Setup軟件製作PostgreSQL+MongoDB+Tomcat+Java環境Windows一鍵安裝包

對於經常開發Java Web項目的童鞋來說,在進入到企業工作後,或多或少的會遇到需要製作可以一鍵安裝的當前代碼/服務的軟件包,即exe格式的Windows軟件安裝包,可以通過嚮導式的部署進行快速的在Windows環境上進行部署。

這裏以PostgreSQL+MongoDB+Tomcat+Java環境爲例,進行Inno Setup腳本的編寫與打包一些思路。

準備很重要,這裏準備好如下的介質:

增強版的Inno Setup5.5

免安裝版的Windows格式的PostgreSQL11.4,需要一些.NET環境依賴

免安裝版的Windows格式的MongoDB3.2

免安裝版的Windows格式的JDK1.7

免安裝版的Windows格式的Tomcat7

和一些其他相關的腳本文件和圖標,如下所示:

在打包前建議應該初始化好相關的配置數據。本文的打包總體思路爲:先初始化好一些數據,然後編寫Inno Setup腳本、Bat安裝腳本、Bat啓動與停止腳本。

 一、相關服務初始化

1、初始化PostgreSQL

由於默認情況PG數據庫會多創建一個賬戶,所以建議在打包前提前初始化好相關的PG數據庫,使用類似如下命令先初始化:

當前目錄\pgsql\bin\initdb.exe -U postgres -W --locale=C -E UTF8 -D 當前目錄\pgsql\data

這樣在當前目錄下的PG數據庫下會產生一個初始的數據目錄,如果有一些需要創建的系統庫和腳本,建議在打包前完成導入。

2、初始化MongoDB

對於MongoDB也是類似,建議打包前初始化相關的數據目錄,類似如下的命令:

當前目錄\mongodb\bin\mongod.exe --dbpath "當前目錄\mongodb\data\db"

3、初始化Tomcat

對於Tomcat建議修改server.xml中的相關默認端口與一些設置,如果要以服務方式運行,需要修改bin目錄下的service.bat文件中的相關服務顯示名稱與一些JVM的參數設置(文件下方),類似如下:

"%EXECUTABLE%" //IS//%SERVICE_NAME% ^
    --Description "系統Web服務信息" ^
    --DisplayName "%DISPLAYNAME%" ^
    --Install "%EXECUTABLE%" ^
    --LogPath "%CATALINA_BASE%\logs" ^
    --StdOutput auto ^
    --StdError auto ^
    --Classpath "%CLASSPATH%" ^
    --Jvm "%JVM%" ^
    --StartMode jvm ^
    --StopMode jvm ^
    --StartPath "%CATALINA_HOME%" ^
    --StopPath "%CATALINA_HOME%" ^
    --StartClass org.apache.catalina.startup.Bootstrap ^
    --StopClass org.apache.catalina.startup.Bootstrap ^
    --StartParams start ^
    --StopParams stop ^
    --JvmOptions "-Dcatalina.home=%CATALINA_HOME%;-Dcatalina.base=%CATALINA_BASE%;-D%ENDORSED_PROP%=%CATALINA_HOME%\endorsed;-Djava.io.tmpdir=%CATALINA_BASE%\temp;-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager;-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties;-Dfile.encoding=utf-8;-Xms2048m;-Xmx8048m;-XX:PermSize=256M;-XX:MaxPermSize=512m;-XX:+DisableExplicitGC;-XX:MaxTenuringThreshold=15;-XX:+UseConcMarkSweepGC;-XX:+CMSParallelRemarkEnabled;-XX:+UseCMSCompactAtFullCollection;-XX:CMSMaxAbortablePrecleanTime=500;-XX:LargePageSizeInBytes=128m;-XX:+UseFastAccessorMethods;-XX:+UseCMSInitiatingOccupancyOnly;-XX:CMSInitiatingOccupancyFraction=50;-Dcom.sun.management.jmxremote.port=9909;-Dcom.sun.management.jmxremote.ssl=false;-Dcom.sun.management.jmxremote.authenticate=false;" ^
    --JvmOptions9 "--add-opens=java.base/java.lang=ALL-UNNAMED#--add-opens=java.base/java.io=ALL-UNNAMED#--add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED" ^
     --JvmMs 2048 ^
    --JvmMx 8048

二、ISS腳本主要內容

對於打包來說,主要編寫的就是ISS腳本,去指定一些安裝包的內部信息。

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

#define MyAppName "Java Web管理系統(單機版)"
#define MyAppVersion "V1.0(20190918)"
#define MyAppPublisher "XX有限公司"
#define MyAppURL "http://www.baidu.com"
#define MyAppExeName "install.bat"

[Setup]
WizardImageFile=first.bmp
; 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={{AF4FC710-848A-4030-B00B-B85440001A30}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
VersionInfoCopyright=Copyright(c) 2019
DefaultDirName=c:\system
;默認開始菜單名 開始菜單中創建文件夾的名稱
DefaultGroupName=Java Web管理系統(單機版)
DisableProgramGroupPage=yes
; 設置安裝協議文件 安裝前文件 安裝後文件
LicenseFile=C:\soft20190911\license.txt
InfoBeforeFile=C:\soft20190911\before.txt

OutputDir=C:\soft_output
OutputBaseFilename=setup0911
SetupIconFile=C:\soft20190911\pbocc.ico
UninstallDisplayIcon=C:\soft20190911\pbocc.ico
Compression=lzma2/Max
SolidCompression=true
VersionInfoProductName=Java Web管理系統(單機版)
VersionInfoProductVersion=0.0.1
VersionInfoVersion=0.0.0.1
; 以管理員模式運行
PrivilegesRequired=admin
; 安裝程序安裝密碼 是否加密
Password=123456
Encryption=yes

[Languages]
Name: "chinesesimp"; MessagesFile: "compiler:Languages\ChineseSimp.isl"

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

[Files]
Source: "C:\soft20190911\start.bat"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\soft20190911\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}";IconFileName: "{app}\install.ico"
Name: "{group}\停止系統"; Filename: "{app}\stop.bat";IconFileName: "{app}\stop.ico"
Name: "{group}\啓動系統"; Filename: "{app}\start.bat";IconFileName: "{app}\start.ico"
;Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\start.bat"
; 桌面快捷
Name: "{commondesktop}\啓動系統"; Filename: "{app}\start.bat"; Tasks: desktopicon;IconFileName: "{app}\start.ico"
Name: "{commondesktop}\訪問系統"; Filename: "{app}\systempage"; Tasks: desktopicon;IconFileName: "{app}\pbocc.ico"
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "初始化當前系統環境"; Flags: shellexec postinstall skipifsilent
; Filename: "http://localhost:9190/soft"; Description: "自動訪問服務http://localhost:9190/soft"; Flags: postinstall shellexec skipifsilent;
[UninstallRun]
Filename:"{app}\uninstall.bat";
[UninstallDelete]
Type:filesandordirs;Name:"{app}\pgsql" 
Type:filesandordirs;Name:"{app}\tomcat"
Type:filesandordirs;Name:"{app}\jdk1.7"
Type:filesandordirs;Name:"{app}\vcredist_x64.exe"
Type:filesandordirs;Name:"{app}\mongodb"
Type:filesandordirs;Name:"{app}\*"
Type:files;Name:"{app}\InstallUtil.InstallLog"

[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D003010F300000054504630F10B5457697A617264466F726D0A57697A617264466F726D0C436C69656E74486569676874034C010B436C69656E74576964746803F1010D4578706C6963697457696474680301020E4578706C696369744865696768740372010D506978656C73506572496E636802600A54657874486569676874020C00F10C544E65774E6F7465626F6F6B0D4F757465724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B57656C636F6D655061676500F10C544269746D6170496D6167651157697A6172644269746D6170496D6167650A4269746D617046696C65060966697273742E626D700000000000

[Code]
{ RedesignWizardFormBegin } // 不要刪除這一行代碼。
// 不要修改這一段代碼,它是自動生成的。
procedure RedesignWizardForm;
begin
{ ReservationBegin }
  // 這一部分是提供給你的,你可以在這裏輸入一些補充代碼。

{ ReservationEnd }
end;
// 不要修改這一段代碼,它是自動生成的。
{ RedesignWizardFormEnd } // 不要刪除這一行代碼。

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;

三、安裝、卸載、啓動、停止相關腳本

1、安裝腳本install.bat,只負責安裝

@echo off

title 軟件配置安裝中,請不要手動關閉
color 0a

echo =====================================================================
echo                   初始化Java Web管理系統     
echo =====================================================================


cd /d %~dp0 

echo 後臺開始安裝.Net環境,請稍後。。。
start /wait %cd%\vcredist_x64.exe /install /quiet
start /wait %cd%\vc_redist.x64 /install /quiet

echo .Net環境成功

echo 準備初始化系統數據服務
"%cd%\pgsql\bin\pg_ctl.exe" register -N softpostgresql -D "%cd%\pgsql\data"
sc config softpostgresql start= demand
rem net start softpostgresql
echo ======================初始化系統數據服務完成========================= 

echo 準備初始化配置數據服務
cd .> %cd%\mongodb\mongo.conf
echo port=29031 >>  %cd%\mongodb\mongo.conf
echo dbpath=%cd%\mongodb\data >>  %cd%\mongodb\mongo.conf
echo logpath=%cd%\mongodb\logs\mongo.log >>   %cd%\mongodb\mongo.conf           
echo logappend=true >>  %cd%\mongodb\mongo.conf
echo auth=true >>  %cd%\mongodb\mongo.conf

sc create softmongodb binpath=  "%cd%\mongodb\bin\mongod.exe --config  %cd%\mongodb\mongo.conf  --service"
echo ======================初始化配置數據服務完成=========================

echo 準備初始化系統Web服務
set JAVA_HOME=%~dp0%jdk1.7
set CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
set PATH=%JAVA_HOME%\bin;%PATH%;
set POSTGRES_HOME=%~dp0%pgsql
set CATALINA_HOME=%~dp0%tomcat
set CATALINA_BASE=%~dp0%tomcat

call "%~dp0%tomcat\bin\service.bat" install softtomcat7
sc config softtomcat7 start= demand
echo ======================初始化系統Web服務完成=========================

echo Java Web系統安裝完成,祝使用愉快~
paus

2、卸載uninstall.bat腳本

@echo off 
title 系統正在卸載中,請不要關閉 
color 0a
echo =====================================================================
echo                   開始卸載Java Web管理系統     
echo =====================================================================

 
echo %~dp0%jdk1.7

set JAVA_HOME=%~dp0%jdk1.7
set CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
set PATH=%JAVA_HOME%\bin;%PATH%;
set POSTGRES_HOME=%~dp0%pgsql
set CATALINA_HOME=%~dp0%mydctomcat
set CATALINA_BASE=%~dp0%mydctomcat

echo 停止並刪除系統Web服務
for /f "skip=3 tokens=4" %%i in ('sc query softmongodb') do set "zt=%%i" &goto :next
:next
if /i "%zt%"=="RUNNING" (
    net stop softmongodb
    if "%errorlevel%"=="0" (
	echo 配置數據信息服務已關閉
    )else (
	echo 配置數據信息服務停止失敗
    )
) else (
    echo 配置數據信息服務當前未啓動
)
cd /d %~dp0
call "%cd%\tomcat\bin\service.bat" remove softtomcat7

echo 停止並刪除系統數據服務
for /f "skip=3 tokens=4" %%i in ('sc query softpostgresql') do set "zt=%%i" &goto :next
:next
if /i "%zt%"=="RUNNING" (
    net stop softpostgresql
    if "%errorlevel%"=="0" (
	echo 系統數據信息服務已關閉
    )else (
	echo 系統數據信息服務停止失敗
    )
) else (
    echo 系統數據信息服務當前未啓動
)
sc delete softpostgresql

echo 停止並刪除系統配置數據服務
for /f "skip=3 tokens=4" %%i in ('sc query softmongodb') do set "zt=%%i" &goto :next
:next
if /i "%zt%"=="RUNNING" (
    net stop softmongodb
    if "%errorlevel%"=="0" (
	echo 配置數據信息服務已關閉
    )else (
	echo 配置數據信息服務停止失敗
    )
) else (
    echo 配置數據信息服務當前未啓動
)
sc delete softmongodb

title 系統卸載處理完成
echo 卸載完成。。。。

3、啓動start.bat腳本

@echo off
title 系統正在啓動中。。。
color 0a
set JAVA_HOME=%~dp0%jdk1.7
set CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
set PATH=%PATH%;%JAVA_HOME%\bin;
set POSTGRES_HOME=%~dp0%pgsql
set CATALINA_HOME=%~dp0%tomcat 
echo =====================================================================
echo                   開始啓動Java Web管理系統     
echo =====================================================================


for /f "skip=3 tokens=4" %%i in ('sc query softmongodb') do set "zt=%%i" &goto :next
:next
if /i "%zt%"=="RUNNING" (
   echo 配置數據信息服務處於運行狀態
) else (
    net start softmongodb
    if "%errorlevel%"=="0" (
	echo 配置數據信息服務已啓動
    )else (
	echo 配置數據信息服務啓動失敗,可能的原因爲服務未正確初始化、未設置管理員權限等
    )
)


for /f "skip=3 tokens=4" %%i in ('sc query softpostgresql') do set "zt=%%i" &goto :next
:next
if /i "%zt%"=="RUNNING" (
   echo 系統數據信息服務已經處於運行狀態
) else (
    net start softpostgresql
    if "%errorlevel%"=="0" (
	echo 系統數據信息服務已啓動
    )else (
	echo 系統數據信息服務啓動失敗,可能的原因爲服務未正確初始化、未設置管理員權限等
    )
)

for /f "skip=3 tokens=4" %%i in ('sc query softtomcat7') do set "zt=%%i" &goto :next
:next
if /i "%zt%"=="RUNNING" (
   echo Web服務已經處於運行狀態
) else (
    net start softtomcat7
    if "%errorlevel%"=="0" (
	echo Web服務已啓動,請稍等1-2分鐘,再打開瀏覽器訪問:http://localhost:9190/soft地址或單機版桌面快捷訪問方式,即可訪問。
    )else (
	echo 系統啓動失敗,可能的原因爲服務未正確初始化、未設置管理員權限等
    )
)

title 系統處理完成

pause

4、停止stop.bat腳本

@echo off
title 系統正在停止
color 0a
echo =====================================================================
echo                   開始停止Java Web管理系統     
echo =====================================================================

for /f "skip=3 tokens=4" %%i in ('sc query softtomcat7') do set "zt=%%i" &goto :next
:next
if /i "%zt%"=="RUNNING" (
    net stop softtomcat7
   if "%errorlevel%"=="0" (
	echo Web服務已成功停止
    )else (
	echo Web服務停止失敗
    )
) else (
    echo Web服務當前未啓動
)

for /f "skip=3 tokens=4" %%i in ('sc query softmongodb') do set "zt=%%i" &goto :next
:next
if /i "%zt%"=="RUNNING" (
    net stop softmongodb
    if "%errorlevel%"=="0" (
	echo 配置數據信息服務已關閉
    )else (
	echo 配置數據信息服務停止失敗
    )
) else (
    echo 配置數據信息服務當前未啓動
)

for /f "skip=3 tokens=4" %%i in ('sc query softpostgresql') do set "zt=%%i" &goto :next
:next
if /i "%zt%"=="RUNNING" (
    net stop softpostgresql
    if "%errorlevel%"=="0" (
	echo 系統數據信息服務已關閉
    )else (
	echo 系統數據信息服務停止失敗
    )
) else (
    echo 系統數據信息服務當前未啓動
)

echo 軟件停止處理完成
pause

以上就是當前製作一鍵安裝包的主要內容,基本的流程就是:

1、先準備好相關軟件截止和環境,包括了數據庫、Java、Tomcat、.Net安裝包等。

2、然後編寫ISS腳本,聲明相關軟件的描述信息,包括安裝時的步驟、密碼、安裝後執行的腳本、桌面圖標、卸載步驟等。

3、單擊Inno Setup工具欄上的編譯圖標即可,編譯成功後在系統上雙擊安裝,安裝後會調用install.bat腳本進行初始化。

4、當需要啓動和停止時,單擊桌面或開始菜單中的快捷圖標即可。

注意事項:

1、當製作的安裝在Windows10上運行時,相關的Bat腳本會手動管理員權限的控制,無法執行,有2中解決辦法:其一是關閉Windows10默認的管理員權限的控制;其二是在安裝結束後,在快捷方式上鼠標右鍵設置爲管理員權限。這樣4個核心的bat腳本即可執行。

希望可以幫助到有需要的人。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章