将Java程序变成Windows系统服务-Java基础-Java-编程开发
来源:互联网 发布:淘宝直通车在哪里 编辑:程序博客网 时间:2024/06/07 03:12
近买了一台机器做个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程序变成Windows系统服务-Java基础-Java-编程开发
- [老文章转载]将Java程序变成Windows系统服务
- 将java程序做成windows系统服务
- 将Java程序安装为系统服务之windows
- Java编程:将Java程序注册成系统服务(NT服务)
- 将java程序运行为Windows服务
- 将java程序安装成windows服务
- 将java程序运行为Windows服务
- 将java程序发布为Windows服务
- 将java程序运行为Windows服务
- 将java程序安装成windows服务
- 将java程序运行为windows服务
- 将 java 程序安装成 windows 服务
- 将Java程序配置成windows服务
- 将java程序安装成windows服务
- 将java程序作为Windows服务
- 将java程序安装成windows服务
- 将java 程序添加为系统服务
- 用Javap反编译帮你理解Java特性-Java基础-Java-编程开发
- 揭开Java 安全标准的神秘面纱-Java基础-Java-编程开发
- 用Java实现回调例程-Java基础-Java-编程开发
- 理解Java面向对象的程序设计思想-Java基础-Java-编程开发
- 浅析Java多线程程序设计机制-Java基础-Java-编程开发
- 将Java程序变成Windows系统服务-Java基础-Java-编程开发
- Java初学者需掌握的30个基本概念-Java基础-Java-编程开发
- 面向Java程序员的Ajax:构建动态Java程序-Java基础-Java-编程开发
- JDBC 入门-Java基础-Java-编程开发
- 浅析Java语言中两种异常的差别-Java基础-Java-编程开发
- Java Servelet API入门基础教程-Java基础-Java-编程开发
- Java Servlet 编程及应用之五-Java基础-Java-编程开发
- Java Servlet 编程及应用之三-Java基础-Java-编程开发
- Java Servlet 编程及应用之四-Java基础-Java-编程开发