转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> JAVA开发 >> 正文
将Java程序变成Windows系统服务         ★★★★

将Java程序变成Windows系统服务

作者:闵涛 文章来源:闵涛的学习笔记 点击数:655 更新时间:2009/4/22 23:30:03

  近买了一台机器做个source服务器和异地的几个朋友一起做点东西玩玩。但是由于用的是电信的ADSL,所以地址是动态的,每天机器自动重起的时候就会变化。于是我就用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";

  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();
 }
}
  其实就是用Jakarta的HttpClient来请求一个URL就可以了。

  于是我现在有了我的Refresher.exe。当然你的系统上一定要有JVM才能运行(废话)。为了运行方便我是把运行时的jar包,如logger.jar,httpclient.jar等打在我的jar包里了。

  接下来就是把它搞成系统服务了。

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

  第二步:regedit打开注册表

  第三步:进入HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Refrehser

  第四步:右键-新建-项 填入 Parameters

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

  第六步:双击Application 填入 c:\refresher.exe

  弟七步:启动Refresher服务。

  一切都OK了。

  在Parameters里还可以添加很多键值:

  AppDirectory 工作目录

  AppParameters 你的应用程序的参数。(我可以把我上面程序做成可以接受参数的,就更通用了)

  AppEnvironment 运行环境变量。

  值现在作为Java程序员的你也可以为自己系统添加一些动能了,赶快去做吧!

编辑推荐:Java初学者专区


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台