一. 使用Winsw將jar包制作成windows服務
-
winsw:
它是一個開源單文件的可執行exe文件,可以再 Github 上下載,一般來說當然是下載最新的。winsw可以運行在.NET2和.NET4兩個版本上,當然如果使用Win10等比較新的系統,最好下載更新版本的.NET。
-
所需文件:
- jre: java運行環境
- logs: 日志文件夾(可選)
- demo.exe:下載后會得到一個WinSW-x64.exe 我這里將它重名為demo.exe ,改成什么都可以便於使用即可。
- demo.jar: java 服務jar包
- demo.xml: 服務配置文件
- install.cmd: cmd腳本,用於添加服務(后續詳解)
- uninstall.cmd: 刪除服務腳本(同上)
-
修改配置:
<service> <!--windows服務id 必須唯一 --> <id>demo</id> <!-- windows服務名稱--> <name>demo</name> <!-- 描述 --> <description>測試服務</description> <!-- 啟動的可執行文件 %BASE%為當前demo.exe所在路徑--> <executable>%BASE%\jre\bin\java.exe</executable> <!-- 傳遞給可執行文件的參數--> <arguments> -jar "%BASE%\demo.jar"</arguments> <!--日志模式 --> <logmode>rotate</logmode> <!-- 日志文件路徑--> <logpath>%BASE%/logs</logpath> <!-- 開機自啟 --> <startmode>Automatic</startmode> </service>
-
Winsw命令說明:
- demo install 安裝服務
- demo uninstall 卸載服務
- demo start 開啟服務
- demo stop 停止服務
- demo restart 重新啟動服務
- demo status 檢查服務的當前狀態
- ps: 命令格式為 winsw.exe install ,例如當前為demo.exe isntall 可以簡寫為 demo isntall
-
install.cmd 安裝服務
@echo.InstallService...... @echo off @demo install @demo start @echo off @echo.Success!
- uninstall.cmd 刪除服務
@echo.UnInstallService @echo off @demo stop @demo uninstall @echo off @echo.DeleteSuccess!
- 啟動后服務中會有相應的服務
可以win+R 在運行中輸入 "SERVICES.MSC" 查看服務
三. 使用Inno Setup打包
-
Inno Setup 使用詳細請看上一篇 : Idea + exe4j + Inno Setup 將javaFx項目集成jdk打包成安裝包 中 :三.Inno Setup 將exe程序集成jdk打包成安裝程序
- 完整目錄:
將Java服務放到打包好的Electron項目里
-
修改Inno Setup 腳本:
在[Run]下添加(用於在安裝時將服務添加到系統中):
Filename: "{app}\server\install.cmd"; StatusMsg: "正在注冊服務...";
添加[UninstallRun]節點 並添加一下內容(用於在卸載時將服務從系統中刪除) :
Filename: "{app}\server\uninstall.cmd"; StatusMsg: "正在刪除服務...";
完整腳本文件:
-
; 腳本由 Inno Setup 腳本向導 生成! ; 有關創建 Inno Setup 腳本文件的詳細資料請查閱幫助文檔! #define MyAppName "我的程序" #define MyAppVersion "1.5" #define MyAppPublisher "我的公司" #define MyAppURL "http://www.example.com/" #define MyAppExeName "demo.exe" [Setup] ; 注: AppId的值為單獨標識該應用程序。 ; 不要為其他安裝程序使用相同的AppId值。 ; (若要生成新的 GUID,可在菜單中點擊 "工具|生成 GUID"。) AppId={{335C4E66-1129-4B46-ACBE-B7CFC6845E40} AppName={#MyAppName} AppVersion={#MyAppVersion} ;AppVerName={#MyAppName} {#MyAppVersion} AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} DefaultDirName={autopf}\{#MyAppName} DisableProgramGroupPage=yes ; 以下行取消注釋,以在非管理安裝模式下運行(僅為當前用戶安裝)。 ;PrivilegesRequired=lowest OutputDir=C:\Users\77175\Desktop\electron\out OutputBaseFilename=demoSetup Compression=lzma SolidCompression=yes WizardStyle=modern [Languages] Name: "chinesesimp"; MessagesFile: "compiler:Default.isl" [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked [Files] Source: "C:\Users\77175\Desktop\electron\demo\dist_electron\win-unpacked\demo.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\Users\77175\Desktop\electron\源文件\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs ; 注意: 不要在任何共享系統文件上使用“Flags: ignoreversion” [Icons] Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon [Run] Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent Filename: "{app}\server\install.cmd"; StatusMsg: "正在注冊服務..."; [UninstallRun] Filename: "{app}\server\uninstall.cmd"; StatusMsg: "正在刪除服務...";