日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

如何注册java程序为windows服务

發布時間:2023/12/4 windows 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何注册java程序为windows服务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近想找個軟件來控制電腦的關機時間,在網上找了幾個,都是可視化界面的可以設置具體的關機時間的軟件。由于我想編寫的關機程序是運行在別人機器上,只能讓該機器在晚上17 點到23 點25 分才上網,到了23 點25 分就可以自動關機。為了讓別人感覺不到這個軟件的“存在”(免得使用者自己關閉定時關機軟件),所以我想把關機軟件注冊為服務的方式,運行在后臺。這里介紹下如何利用javaService 軟件把java 程序注冊為windows 服務。一、 ?利用javaService 注冊java 程序為windows 服務[1] 下載javaService訪問網址http://javaservice.objectweb.org/ 下載windows 版本的javaService 文件,我下載的是JavaService-2.0.10.rar ,目前最新的版本就是“2.0.10 ”。[2] 安裝javaService解壓我們下載下來的javaServices 到一個目錄,我是解壓到目錄“D:/software/JavaService-2.0.10 ”下(解壓到任何目錄都可以,最好別解壓到中文目錄,省的出現問題 )[3] 編寫定時關機代碼,見第二章的定時關機代碼1) ? 具體代碼參加第二章,類的名字為:com.test.timer.TimerShutDownWindows2) ? 把編寫后的java 文件導出為class 的形式,把導出的類放到目錄“D:/software/JavaService-2.0.10/classes/com/test/timer ”下。也就是把導出的com 包放到“D:/software/JavaService-2.0.10/classes” 目錄下。[4] 注冊java 程序為windows 服務進入“D:/software/JavaService-2.0.10 “目錄,執行如下命令:JavaService.exe -install MyShutDownService "%JAVA_HOME%"/jre/bin/server/jvm.dll -Djava.class.path="%JAVA_HOME%"/lib/tools.jar;D:/software/JavaService-2.0.10/classes -start com.test.timer.TimerShutDownWindows其中“-install “后面的參數為服務的名稱,“-start ”參數后邊是要啟動的類名,“Djava.class.path ”后面參數中的“D:/software/JavaService-2.0.10/classe ”地址是我的“TimerShutDownWindows ”類存放的路徑,實際應用中修改為自己的classPath 即可。這里需要注意幾點:1) ? “%JAVA_HOME% ”jdk 目錄,如果沒有配置jdk 目錄,則替換為jdk 的實際絕對地址。2) ? -Djava.class.path 是必須的,因為服務啟動的時候無法訪問系統的CLASSPATH 變量,所以必須在這里聲明;如果jar 比較多,為避免寫的命令過長,我們可以使用“-Djava.ext.dirs=jars 所在目錄”參數。3) ? 服務添加之后,可以在命令行中敲入“services.msc ”命令來查看所有服務,并可以對服務的啟動類型(自動啟動還是手動啟動等)進行修改。[5] 測試1) ?啟動服務當我們注冊完服務后,我們可以通過命令“net start MyShutDownService ”來啟動該服務,服務啟動后會在D 盤根目錄生成my_shutdown.log 日志文件。2) ?關閉服務如果我們要關閉服務,可以通過命令“net stop MyShutDownService ”來關閉該服務。3) ?刪除服務當我們想刪除該服務時,可以使用命令“sc delete MyShutDownService ”來刪除該服務。二、 ?定時關機代碼package com.test.timer;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;public class TimerShutDownWindows {/* 檢測是否需要關機的時間間隔 */private static long m_nDetectInterval = 5000;/* 記錄上次檢測的時間,以毫秒為單位 */private static long m_lLastMilliSeconds = 0;/* 可以使用電腦的最小小時 */private static int m_nUsePCMinHour = 17;/* 可以使用電腦的最大小時 */private static int m_nUseComputerMaxHour = 23;/* 如果分鐘超過這個時間,則關機計算機 */private static int m_nMinutes = 25;/* 記錄日志的文件的保存位置 */private static String m_sLogFile = "D:" + File.separator+ "my_shutdown.log";/* 記錄當前系統是否已經啟動自動關閉程序 */private static boolean bHasShutDownPC = false;/*** @param args*/public static void main(String[] args) {// 1. 單獨開啟一個線程去檢測Thread aThread = new Thread(new TimerDetector());aThread.start();}/*** 定義內部類** @author Administrator**/static class TimerDetector implements Runnable {/** (non-Javadoc)** @see java.lang.Runnable#run()*/public void run() {// 1. 獲取日志文件PrintWriter out = null;SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try {out = new PrintWriter(new FileWriter(m_sLogFile, true), true);} catch (IOException e1) {out = null;e1.printStackTrace();}// 2. 記錄服務啟動時間appendLog(out, " 服務啟動時間:" + df.format(new Date()));while (true) {// 1. 判斷當前系統時間是否被修改過boolean bShoudShutDownPC = validateShoudShutDownPC(out);if (bShoudShutDownPC) {// 驗證沒通過,強制關機exectueShutDown(out);} else {bHasShutDownPC = false;}// 2. 當前線程休眠下try {Thread.sleep(m_nDetectInterval);} catch (InterruptedException e) {appendLog(out, e.getMessage());}}}/*** 驗證當前時間是否是需要關機的時間** @return*/private boolean validateShoudShutDownPC(PrintWriter _out) {// 1. 判斷是否修改了系統時間boolean bHasModifySystemTime = detectModifySytemTime(_out);appendLog(_out, "bHasModifySystemTime :" + bHasModifySystemTime);if (bHasModifySystemTime) {return bHasModifySystemTime;}// 2. 沒有修改系統時間,則判斷當前時間是否超過了指定的時間boolean bShoudSleep = nowIsSleepTime();appendLog(_out, "bShoudSleep :" + bShoudSleep);if (bShoudSleep) {return bShoudSleep;}return false;}/*** 判斷當前時間是否應該休息的時間** @return*/private boolean nowIsSleepTime() {// 1. 獲取當前小時和分鐘Calendar aCalendar = Calendar.getInstance();int nHour = aCalendar.get(Calendar.HOUR_OF_DAY);int nMinute = aCalendar.get(Calendar.MINUTE);// 2. 判斷當前小時是否在可以使用PC 的時間內, 最大小時為23if (nHour < m_nUsePCMinHour) {return true;}// 23 點需要單獨判斷,超過23 點30 就應該休息if ((nHour >= m_nUseComputerMaxHour) && (nMinute >= m_nMinutes)) {return true;}// 3. 非休息時間return false;}/*** 判斷是否有人修改了系統時間,如果有人修改了系統時間返回true ,<BR>* 否則返回false** @return*/private boolean detectModifySytemTime(PrintWriter _out) {// 1. 第一次檢測系統時間if (m_lLastMilliSeconds == 0) {m_lLastMilliSeconds = System.currentTimeMillis();return false;}// 2. 檢測兩次時間的差值long lInteral = System.currentTimeMillis() - m_lLastMilliSeconds;lInteral = Math.abs(lInteral);// 3. 判斷兩次的時間間隔, 兩次結果不一定完全等于 m_nDetectInterval ,允許誤差為1 分鐘long lMaxInterval = m_nDetectInterval + 60 * 1000;appendLog(_out, "lInteral :::" + lInteral);appendLog(_out, "lMaxInterval :::" + lMaxInterval);if (lInteral > lMaxInterval) {// 有人修改了系統時間,強制關機return true;}// 4. 只有沒人修改時間才記錄上次檢測時間m_lLastMilliSeconds = System.currentTimeMillis();return false;}/*** 在指定的流中寫入日志信息** @param _outWriter* @param _sAppendContent*/private void appendLog(PrintWriter _outWriter, String _sAppendContent) {if (_outWriter == null) {return;}_outWriter.println(_sAppendContent);}/*** 執行關機命令*/private void exectueShutDown(PrintWriter _out) {if (bHasShutDownPC) {SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");appendLog(_out, " 系統即將關閉, 當前時間:" + df.format(new Date()));return;}appendLog(_out, " 有人修改了系統時間,系統強制關機!");// 關機try {Runtime.getRuntime().exec("shutdown -s -t 120 -c /" 很晚了,該睡覺了,2 分鐘后關閉計算機。/"");} catch (IOException e) {appendLog(_out, e.getMessage());}bHasShutDownPC = true;}}}

總結

以上是生活随笔為你收集整理的如何注册java程序为windows服务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。