程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> 將Java程序變成Windows系統服務

將Java程序變成Windows系統服務

編輯:JAVA編程入門知識

     近買了一台機器做個source服務器和異地的幾個朋友一起做點東西玩玩。但是由於用的是電信的ADSL,所以地址是動態的,天天機器自動重起的時候就會變化。 <!-- frame contents --> <!-- /frame contents --> 於是我就用3322的域名綁定,但是3322提供的windows更新dns的客戶端運行時不是作為系統服務運行的,所以沒有用戶登錄時它是沒有運行的,所以還是沒有解決問題。後來下了一個Windows Resource Kit Tools(這個工具windows server默認是沒有的,需要到微軟的網站上下載,具體地址我沒有記住,Google一下肯定能找到),裡面有一些工具可以把普通的win32程序變成系統服務。

     instsrv: 這個工具是把win32程序變成系統服務,但是並不是所有程序都適合做系統服務的,如CN99的客戶端,注冊成系統服務後就是無法啟動的。

     基本用法:instsrv [服務名] [應用程序絕對路徑]

     srvany: 這個工具就是用來解決上面的工具中的問題,你注冊的時候把它當作你要的服務,在用它來啟動你的應用程序。

     instsrv [服務名] [srvany的絕對路徑]

     注冊成功後,到服務治理器中把剛才注冊的服務打開,在啟動參數中填上你的應用程序絕對路徑,啟動服務就可以了。

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

     但是心裡不爽,作為一個程序員如此受制於人總是不爽的,其實CN99的動態域名更新協議很簡單,編個簡單的程序就實現的。無奈只會Java,對於C或C++程序員來說,做一個系統服務實在是小Case啊,後悔當初沒有好好學C和C++。但是難道就沒有辦法把Java程序變成windows系統服務嗎?在Java的世界裡基本上是沒有不可能的事,ObjectWeb Forge上有個項目叫JavaService就是用來把Java程序注冊成系統服務的。於是下來看了一下:

     一試--失敗

     二試--不成功

     三試--...

     ...
     ...

     放棄!

     老子自己做了,其實有了上面的instsrv和srvany其實就差一個可執行文件了。於是我用JBuilder把我的jar包做成了一個假的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";
  
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved