人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

將Java程序變成Windows系統(tǒng)服務(wù)

將Java程序變成Windows系統(tǒng)服務(wù)

更新時(shí)間:2022-07-17 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

近買了一臺(tái)機(jī)器做個(gè)source服務(wù)器和異地的幾個(gè)朋友一起做點(diǎn)東西玩玩。但是由于用的是電信的ADSL,所以地址是動(dòng)態(tài)的,每天機(jī)器自動(dòng)重起的時(shí)候就會(huì)變化。于是我就用3322的域名綁定,但是3322提供的windows更新dns的客戶端運(yùn)行時(shí)不是作為系統(tǒng)服務(wù)運(yùn)行的,所以沒有用戶登錄時(shí)它是沒有運(yùn)行的,所以還是沒有解決問題。后來下了一個(gè)Windows Resource Kit Tools(這個(gè)工具windows server默認(rèn)是沒有的,需要到微軟的網(wǎng)站上下載,具體地址我沒有記住,google一下肯定能找到),里面有一些工具可以把普通的win32程序變成系統(tǒng)服務(wù)。

  instsrv: 這個(gè)工具是把win32程序變成系統(tǒng)服務(wù),但是并不是所有程序都適合做系統(tǒng)服務(wù)的,如CN99的客戶端,注冊(cè)成系統(tǒng)服務(wù)后就是無法啟動(dòng)的。

  基本用法:instsrv [服務(wù)名] [應(yīng)用程序絕對(duì)路徑]

  srvany: 這個(gè)工具就是用來解決上面的工具中的問題,你注冊(cè)的時(shí)候把它當(dāng)作你要的服務(wù),在用它來啟動(dòng)你的應(yīng)用程序。

  instsrv [服務(wù)名] [srvany的絕對(duì)路徑]

  注冊(cè)成功后,到服務(wù)管理器中把剛才注冊(cè)的服務(wù)打開,在啟動(dòng)參數(shù)中填上你的應(yīng)用程序絕對(duì)路徑,啟動(dòng)服務(wù)就可以了。

  這種方式可以解決更新域名地址的問題了。

  但是心里不爽,作為一個(gè)程序員如此受制于人總是不爽的,其實(shí)CN99的動(dòng)態(tài)域名更新協(xié)議很簡(jiǎn)單,編個(gè)簡(jiǎn)單的程序就實(shí)現(xiàn)的。無奈只會(huì)Java,對(duì)于C或C++程序員來說,做一個(gè)系統(tǒng)服務(wù)實(shí)在是小Case啊,后悔當(dāng)初沒有好好學(xué)C和C++。但是難道就沒有辦法把Java程序變成windows系統(tǒng)服務(wù)嗎?在Java的世界里基本上是沒有不可能的事,ObjectWeb Forge上有個(gè)項(xiàng)目叫JavaService就是用來把Java程序注冊(cè)成系統(tǒng)服務(wù)的。于是下來看了一下:

  一試--失敗

  二試--不成功

  三試--...

  ...
  ...

  放棄!

  老子自己做了,其實(shí)有了上面的instsrv和srvany其實(shí)就差一個(gè)可執(zhí)行文件了。于是我用JBuilder把我的jar包做成了一個(gè)假的exe文件。

  我的DNS更新程序如下:

package org.mstar.dns;

import java.util.TimerTask;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.HttpException;
import java.io.IOException;
import java.util.*;
import org.apache.commons.logging.*;
import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import java.text.SimpleDateFormat;

public class Refresher {
 private static Log LOG = LogFactory.getLog(Refresher.class);
 public Refresher() {
  Timer timer = new Timer();
  timer.schedule(new RefreshTask(), 0, 60000);
 }

 class RefreshTask extends TimerTask {
  static final String URL ="http://members.3322.org/dyndns/update?system=dyndns&hostname=zjumty.3322.org";

  public void run() {
   HttpClient client = new HttpClient();
   client.getParams().setAuthenticationPreemptive(true);
   Credentials defaultcreds = new UsernamePasswordCredentials("username", "password");
   //此處我要保密
   client.getState().setCredentials(new AuthScope("members.3322.org",
     80, AuthScope.ANY_REALM), defaultcreds);
   GetMethod method = new GetMethod(URL);
   try {
    int statusCode = client.executeMethod(method);
    if (statusCode != HttpStatus.SC_OK) {
     LOG.error("Method failed: " + method.getStatusLine());
    }
    Date date = Calendar.getInstance().getTime();
    SimpleDateFormat fmt = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    byte[] responseBody = method.getResponseBody();
    LOG.info(fmt.format(date) + " -- " + new String(responseBody));
   } catch (HttpException e) {
    LOG.error("Fatal protocol violation: " + e.getMessage());
    e.printStackTrace();
   } catch (IOException e) {
    LOG.error("Fatal transport error: " + e.getMessage());
    e.printStackTrace();
   } finally {
    method.releaseConnection();
   }
  }
 }

 public static void main(String[] args) {
  Refresher refresher = new Refresher();
 }
}

  其實(shí)就是用Jakarta的HttpClient來請(qǐng)求一個(gè)URL就可以了。

  于是我現(xiàn)在有了我的Refresher.exe。當(dāng)然你的系統(tǒng)上一定要有JVM才能運(yùn)行(廢話)。為了運(yùn)行方便我是把運(yùn)行時(shí)的jar包,如logger.jar,httpclient.jar等打在我的jar包里了。

  接下來就是把它搞成系統(tǒng)服務(wù)了。

  第一步:instsrv Refrehser C:\Program Files\Windows Resource Kits\Tools\srvany.exe

  第二步:regedit打開注冊(cè)表

  第三步:進(jìn)入HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Refrehser

  第四步:右鍵-新建-項(xiàng) 填入 Parameters

  第五步:打開Parameters,右鍵-新建-字符串值 Application

  第六步:雙擊Application 填入 c:\refresher.exe

  弟七步:?jiǎn)?dòng)Refresher服務(wù)。

  一切都OK了。

  在Parameters里還可以添加很多鍵值:

  AppDirectory 工作目錄

  AppParameters 你的應(yīng)用程序的參數(shù)。(我可以把我上面程序做成可以接受參數(shù)的,就更通用了)

  AppEnvironment 運(yùn)行環(huán)境變量。

  值現(xiàn)在作為Java程序員的你也可以為自己系統(tǒng)添加一些動(dòng)能了,趕快去做吧!

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 包头市| 喀喇沁旗| 安溪县| 沁阳市| 桂平市| 墨江| 甘肃省| 宝兴县| 北流市| 抚宁县| 崇信县| 南召县| 太仓市| 乌恰县| 长沙县| 二连浩特市| 汉沽区| 南召县| 南皮县| 襄城县| 徐闻县| 东丽区| 吉林市| 偃师市| 千阳县| 板桥市| 仪征市| 枣庄市| 汨罗市| 凉城县| 新闻| 稷山县| 平山县| 永仁县| 织金县| 昭平县| 松桃| 内江市| 垦利县| 石河子市| 金昌市|