1. 程式人生 > >java程式實現開機自啟動功能

java程式實現開機自啟動功能

有時一個程式需要長時間執行,但如果重啟機器,沒人手動啟動軟體時,就沒有辦法執行起來。最好的辦法是能實現程式開機自啟動。

方案一:

工具:
Instsrv.exe(可以給系統安裝和刪除服務)
Srvany.exe(可以讓程式以服務的方式執行)

步驟:
1 將下載的工具解壓到某檔案路徑,如D:\Software\讓程式作為服務執行 目錄下
2 假設註冊的服務名為testLiliaService,cmd進入Dos環境下(管理員執行),執行命令,註冊testLiliaService服務

D:\Software\讓程式作為服務執行\instsrv.exe testLiliaService D:\Software
\讓程式作為服務執行\srvany.exe

這裡寫圖片描述

3 讓程式繫結到服務上

1)執行regedit開啟登錄檔編輯器,然後進入登錄檔在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下找到剛剛註冊的服務名testLiliaService

2)右擊testLiliaService新建一個項,名稱為“Parameters”,單擊選中它然後在右側的視窗新建一個字串值名稱為“Application”,將其值設定為你針要做為服務執行的程式的路徑,例如我的路徑為“D:\\tools\\test.bat”。

3)這裡特別要注意的是程式路徑一定要寫得跟前面的例子一樣,也是就是中間是用雙斜槓隔開,不然服務沒辦法自動啟動。

4)然後可以再建立一個AppDirectory指定程式執行的初始目錄(可選)。

5)如果你需要把自己註冊的服務做得看起來更專業也更好理解的話還可以繼續新建一個字串值名稱為“Description”,在其值裡面你可以輸入你想顯示的服務描述。

這裡寫圖片描述

4 啟動服務

1)在執行中輸入“services.msc”並回車,在列表中找到我們剛新增的testLiliaService服務,雙擊開啟,來做詳細的設定。在“General”選項卡上,我們需要設定這個服務的執行方式,在圖二中可以看見,作為一個服務,有“自動(Automatic)”,“手動(Manual)”和“禁止(Disabled)”三種啟動型別,按照需要,我們一般設定成自動就可以了。

2)而在“Logon”選項卡下可以設定以什麼身份執行這個服務,一般可以不用理會,按照預設的設定。“Recovery”選項卡下則是進行恢復設定的,你可以指定,在服務第一次,第二次和第三次出錯之後分別採取什麼措施。

3)“Dependencies”則顯示了服務之間的依存關係,可以讓你察看這個服務的執行依賴哪些其它服務,以及還有什麼服務依賴於這個服務。這後面幾個對我們一般使用者沒有什麼意義。經過這些設定,你的服務已經完全可以正常工作了。

這裡寫圖片描述

這樣程式就可以作為服務啟動了,服務設定為自動的啟動型別,重啟電腦,會發現程式會自動啟動的。

5 刪除註冊的服務
首先停止服務,然後用命令

D:\Software\讓程式作為服務執行\instsrv.exe testLiliaService remove

刪除服務之後手動刪一下注冊表,最後再重啟一下電腦,這個服務就徹底刪除了

方案一弊端:程式開機啟動後,不能顯示出jar包執行的黑視窗,在關閉程式和重啟時必須進入程序中,手動殺死。另外程序與程式的生命週期不繫結,服務關閉了,但程式的程序不一定未關閉,若一個服務啟動繫結多個程式,管理起來不方便,因為在程序中只會顯示到jdk位置,多個程式不好區分。

方案二:
使用Java Service Wrapper,方案二與方案一實現的原理是一樣的,註冊一個服務,然後把程式啟動入口與服務配置在一起
網上很多人推薦用這種方式實現java程式註冊為windows服務。

1 下載java service wrapper

我下載的版本是wrapper-windows-x86-32-3.5.20.zip。

2 配置過程

1)首先確定你的電腦上有java執行環境,沒有的話請安裝。

2)將你的java程式打包成jar包。(我的jar的名稱為JavaServiceTest.jar,main方法所在類JavaServiceTest)

3)在硬碟上建立資料夾test, 並在其下建立資料夾bin, conf, lib, logs。

4)解壓wrapper-windows-x86-32-3.5.20.zip, 並將其bin目錄下的Wrapper.exe、src/bin目錄下的App.bat.in、InstallApp-NT.bat.in、UninstallApp-NT.bat.in檔案

      拷貝到test的bin目錄中,其中後面三個分別改名為App.bat、InstallApp-NT.bat、UninstallApp-NT.bat。

5)將其lib目錄下的Wrapper.DLL、wrapper.jar拷貝到test的lib目錄中。並且將專案的jar和所用到的jar都拷貝到該目錄(包括你自己的java程式jar)。

6)將其src/conf目錄下的wrapper.conf.in拷貝到workapp的conf目錄中,並命名為wrapper.conf。

3 修改wrapper.conf檔案

主要修改下面幾項:

1)JVM位置:

 wrapper.java.command=C:\jdk1.5.0_07\bin\java 或者 wrapper.java.command=%JAVA_HOME%/bin/java(需要在系統的環境變數裡配置JAVA_HOME)

2)MAIN CLASS 此處決定了使用Java Service Wrapper的方式

 wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp

3)你的Java程式所需的jar包必須全部在此標明,注意路徑準確:

 wrapper.java.classpath.1=../lib/JavaServiceTest.jar

 wrapper.java.classpath.2=../lib/wrapper.jar

 wrapper.java.classpath.3=../lib/sqljdbc4.jar

  ……

4)你的Wrapper.DLL或wrapper.jar所在的目錄

  wrapper.java.library.path.1=../lib

5)你的Java應用程式的執行類(主類)

  wrapper.app.parameter.1=com.test.JavaServiceTest

6)註冊為服務的名稱和顯示名,你可以隨意進行設定

  wrapper.name=testwrapper

  wrapper.displayname= Test Wrapper Sample Application

7)服務描述資訊

  wrapper.description= Test Wrapper Sample Application Description

8)服務的啟動型別

  # Mode in which the service is installed.  AUTO_START, DELAY_START or DEMAND_START

  wrapper.ntservice.starttype=AUTO_START

4 修改好了以後,執行MyApp.bat即可執行你的java程式,這裡可以測試配置的是否正確,如果可以執行,證明配置ok。

5 執行InstallApp-NT.bat可以進行服務的註冊,UninstallApp-NT.bat為登出服務。

6 執行完註冊服務InstallApp-NT.bat可以在 控制面板-管理程式-服務中看到你註冊的服務名稱。(如:Test Wrapper Sample Application)

方案二弊端:第一點,程式使用的所有jar包都需要在wrapper.conf中說明,如果程式遺漏了在這裡配置的包時,就會出現問題。當專案有很多包時,那真的排查問題就非常痛苦了。第二點,這裡是每個程式註冊成一個服務,若程式有多個,就會註冊很多的個人服務。第三點:Java Service Wrapper包含專業版,穩定版和社群版,專業版和穩定版都需要license,是收費的。社群版不收費,但社群版只支援windows 32位的系統,64位系統暫不支援。

方案三:(推薦)
方案三是使用windows自己的程式自啟動功能。然後利用bat檔案的start命令,實現一個bat檔案啟動多個java程式的功能

1 將需要開機自啟動的程式放在資料夾software下

這裡寫圖片描述

2 每個資料夾放置好啟動需要的jar包和配置檔案

這裡寫圖片描述

3 在software目錄下,編寫總啟動檔案,步驟1中的javaProgramStart.bat檔案,內容為

這裡寫圖片描述

注意這裡的start是必須的,不然後面的程式不能啟動起來(單執行緒執行這些程式)

4 建立javaProgramStart.bat的快捷方式,將快捷方式放到C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp目錄下

5 在程式啟動時,就會自行啟動software配置下的程式