Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16493374
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:45:55

下载本文示例代码
  基本用法: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 ="";  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初学者专区   基本用法: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 ="";  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初学者专区 下载本文示例代码


将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程序变成Windows系统服务将Java程序变成Windows系统服务将Java程序变成Windows系统服务
阅读(306) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~