`
yanguz123
  • 浏览: 555898 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java程序 注册为 Windows 服务

 
阅读更多

(1)制作WINDOWS EXE程序

 

    java做成window的exe程序或者服务程序实在是吃饱撑的,有点变态,但是如果你不想起在一台服务器的后台程序,被哪个笨蛋不小心给关了,或者人家把进程中的java给杀了,那就有必要照着下面我说的方法去做了:  

 

 borland不公开的一个使用技巧,能够通过jbuilder来制作exe文件来启动java文件。jbuilder并不支持本地编译机制。但是有一个隐藏的技巧可以让你从可执行文件来启动java程序,可以出现或者不出现console窗口。想做到这些,需要jbuilder的bin目录下的这些文件: 

jbuilder.exe (带DOS窗口)

jbuilderw.exe (不带DOS窗口) 

jbuilder.config 

jdk.config 

 

  “jbuilder.exe”是一个通用的可执行外壳文件,用以启动java程序,”jbuilderw.exe“好像是javaw.exe一样,它把”jbuilder.exe”包装起来,但是运行时候不显示那个console的窗口。使用这些文件的关键是文件名。“jbuilder.exe”查找一个文件叫”jbuilder.config”的配置文件,里面包含了运行java程序的必须信息。同样的”jbuilderw.exe”查找”jbuilder.exe”来启动不带console窗口的java程序。

 

  如果把jbuilder.exe重命名为”smsDialTest.exe”,那”smsDialTest.exe”将去寻找”smsDialTest.config”配置文件,同样”jbuilderw.exe”被重命名为”smsDialTestw.exe”,它会去寻找”smsDialTest.exe”文件。

 

      所以,我们只要把jbuilder .exe,jbuilerw.exe,jbuilder.config改名成相应的文件名,在jbuilder.config里面指定主 

类和类路径,就能够通过执行jbuilder.exe(或者被改名后的exe文件)来启动java应用程序了。  

 

  设置jdk.conifg中的"javapath",例子:“javapath ../jdk1.5/jre/bin/client/jvm.dll”

 

      设置smsDialTest.config:

 

      # +-----------------------------------------------------+

# |                                                     |

# | This is the configuration file for the smsDialTest  |

# |                                                     |

# |   Do NOT make modifications without maintaining a   |

# |      backup copy.  See config_readme.html for a     |

# |      description of the recognized directives.      |

# |                                                     |

# +-----------------------------------------------------+

 

# Read the shared JDK definition

include jdk.config

 

# Tune this VM to provide enough headroom to work on large

# applications

vmparam -Xms128m

vmparam -Xmx512m

 

# Put the Light AWT wrapper and various JDK fixes on the boot path

addbootpath ../image

 

 

# Add all JAR files located in the patch, lib and lib/ext directory

addjars ../lib

addjars ../classes

 

 

 

# Activate the shell integration

socket 8888

 

# Add all the configuration files located in the lib/ext directory

 

 

 

# JBuilder needs to have access to the environment

exportenv

 

# Start smsDialTEST using the main class

mainclass smsdialtest.gui.SmsDialTestMainFrame

 

(2)把JAVA程序做成windows服务程序

 

我试过把JAVA做成EXE,然后再做成windows服务,但是问题出来了,没地方把环境变量以及很多参数设置进去。

 

最后,用“java service  Wrapper”来搞定这个问题。

 

Wrapper 下载页面

   http://sourceforge.net/project/showfiles.php?group_id=39428

 

  最新的是3.1.2  以下例子都是在此版本下进行

  环境:Win2003server + JDK1.5 + Wrapper3.1.2

 

 

  配置wrapper.conf文件>

    

#********************************************************************

# Wrapper Properties

#********************************************************************

# Java Application

wrapper.java.command=E:/project/developIDE/project/unicomsms/dialtest/jdk1.5/bin/java

 

# Java Main class.  This class must implement the WrapperListener interface

#  or guarantee that the WrapperManager class is initialized.  Helper

#  classes are provided to do this for you.  See the Integration section

#  of the documentation for details.

wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp

 

# Java Classpath (include wrapper.jar)  Add class path elements as

#  needed starting from 1

wrapper.java.classpath.1==%PATH%

wrapper.java.classpath.2=../lib/wrapper.jar

wrapper.java.classpath.3=../lib/*.jar

wrapper.java.classpath.4=../classes

wrapper.java.classpath.5=../conf

wrapper.java.classpath.6=../log

 

 

# Java Library Path (location of Wrapper.DLL or libwrapper.so)

wrapper.java.library.path.1=../lib

wrapper.java.library.path.2=../jdk1.5/jre/lib/ext/win32com.dll

wrapper.java.library.path.3=../jdk1.5/jre/bin/win32com.dll

# Java Additional Parameters

#wrapper.java.additional.1=

 

# Initial Java Heap Size (in MB)

#wrapper.java.initmemory=128

 

# Maximum Java Heap Size (in MB)

#wrapper.java.maxmemory=512

 

# Application parameters.  Add parameters as needed starting from 1

wrapper.app.parameter.1=smsdialtest.util.SmsServerUtil

 

#********************************************************************

# Wrapper Logging Properties

#********************************************************************

# Format of output for the console.  (See docs for formats)

wrapper.console.format=PM

 

# Log Level for console output.  (See docs for log levels)

wrapper.console.loglevel=INFO

 

# Log file to use for wrapper output logging.

wrapper.logfile=../log/wrapper.log

 

# Format of output for the log file.  (See docs for formats)

wrapper.logfile.format=LPTDM

 

# Log Level for log file output.  (See docs for log levels)

wrapper.logfile.loglevel=INFO

 

# Maximum size that the log file will be allowed to grow to before

#  the log is rolled. Size is specified in bytes.  The default value

#  of 0, disables log rolling.  May abbreviate with the 'k' (kb) or

#  'm' (mb) suffix.  For example: 10m = 10 megabytes.

wrapper.logfile.maxsize=0

 

# Maximum number of rolled log files which will be allowed before old

#  files are deleted.  The default value of 0 implies no limit.

wrapper.logfile.maxfiles=0

 

# Log Level for sys/event log output.  (See docs for log levels)

wrapper.syslog.loglevel=NONE

 

#********************************************************************

# Wrapper Windows Properties

#********************************************************************

# Title to use when running as a console

wrapper.console.title=增值业务综合网管业务拨测客户端软件

 

#********************************************************************

# Wrapper Windows NT/2000/XP Service Properties

#********************************************************************

# WARNING - Do not modify any of these properties when an application

#  using this configuration file has been installed as a service.

#  Please uninstall the service before modifying this section.  The

#  service can then be reinstalled.

 

# Name of the service

wrapper.ntservice.name=服务名字

 

# Display name of the service

wrapper.ntservice.displayname=服务名字

 

# Description of the service

wrapper.ntservice.description=服务名字

 

# Service dependencies.  Add dependencies as needed starting from 1

wrapper.ntservice.dependency.1=

 

# Mode in which the service is installed.  AUTO_START or DEMAND_START

wrapper.ntservice.starttype=AUTO_START

 

# Allow the service to interact with the desktop.

wrapper.ntservice.interactive=false

 

  把wrapper-windows-x86-32-3.2.1\src\bin目录下的,几个文件COPY到你的BIN目录下,把他们的.bat.in扩展名,改为.bat就可以了。

App.bat.in//手工启动你的程序,带着DOS窗口,一开始你要用这个文件测试你的环境是否搭好了

InstallApp-NT.bat.in//安装服务程序,安装成功后会在WINDOWS服务中显示出你的服务程序

UninstallApp-NT.bat.in//卸载服务程序。

wrapper.exe//wrapper主程序

 

   把wrapper-windows-x86-32-3.2.1\lib目录下的wrapper.dll,wrapper.jar2个文件COPY到你的LIB目录下。

 

最后,你先用App.bat测试你的程序,如果一切正常,就运行InstallApp-NT.bat.。这样制作的服务就成功了。

 

 

 

 

 

 

 

 

 

 

eclipse导出jar文件再将它转换成exe可执行文件详解 

关键字: 欢迎光临 

此文章是为了帮助刚接触j2se或不懂如何打包jar文件的人而着笔,同时也是让自己的知识以文章的形式保存起来. 

 

一、导出jar文件: 

 

如果你的程序开发已经接近尾声了,正准备将其生成桌面可执行文件却不知道该如何操作时,你只要按照以下步骤实行即可:选中你的项目---然后右击弹出选项列表---选择Export---Java---jar file---next---browser(选择jar的存放路径)---next---next(不管太多继续下一步)---browser(选择你程序的主类--OK)---finish;查看你存放jar的目录,是否已经生成了?如果没有你一定没按照步骤操作. 

 

二、运行jar文件: 

 

生成的jar文件你可以双击运行它,但默认情况下会以压缩包的方式打开,如果这不是你想要的结果,请右击文件---打开方式---选择java(TM)platform来运行.我想这时你应该看到了你的软件界面.先恭喜你了.. 

 

三、连同第三方文件一并导出至jar文件: 

 

如果你在程序开发的时候用到了第三方提供的API或者其它附属资源,在你导出生成jar文件时你必须将第三方的文件一并导出,不然你的程序运行将达不到你想要的结果. 

 

你可以利用Fat jar插件生成jar,Fat jar 的下载地址:http://sourceforge.net/projects/fjep/ 下载的文件是net.sf.fjep.fatjar_0.0.31.zip,解压缩后你会看到plugins文件夹中的net.sf.fjep.fatjar_0.0.31.jar文件(简称Fat jar). 

 

插件安装:把Fat jar文件拷贝到你的eclipse目录下的plugins中..重新启动你的eclipse平台,然后查看Window---preferences,弹出的窗口中有Fat jar preferences这一项则说明你已经安装成功了,没有这一项则未安装成功,需要多做如下几步操作:到你的eclipse目录下的configuration---org.eclipse.update,并删除platform.xml文件,然后重新启动eclipse.查看Window---preferences,你会发现Fat jar preferences这一项.恭喜你安装成功了.(未成功可直接去墙撞死).. 

 

用Fat jar打包:右击你的项目,选项列表中有Build Fat jar这一项,选择它,弹出的窗口你会觉得特别亲切,一目了然使用很方便,点击Browser(Main-Class选择你的主类)---next---finish(勾选你需要一起打包的资源,默认为全部勾选).瞧,jar文件就生成在你的工程项目中了.运行它,一切顺利,否则就是你编程的问题了.. 

 

另:如果你不想用Fat jar来打包,有一个更快捷的方法可以帮助你,但也是有缺陷的. 

 

步骤:将你需要用到的附属文件放到你的jre安装目录下的\lib\ext目录中(安装JDK的同时也安装了jre),再通过(一、导出jar文件)的方式生成jar.这样就可以了.它有个致命的缺点就是,这样的jar文件只能在你本机可以使用,如果要在别的机子上运行必需在\lib\ext放置同样的附属资源. 

 

四、将jar文件转换成exe可执行文件: 

 

exe文件使用方便,而且还可以提高源码及资源的安全性,但同时也失去了java的初衷--跨平台性. 

 

如果你坚持要转换成exe文件,请按以下方式进行: 

 

利用exe4j这个软件转换jar文件为exe文件,exe4j下载地址:http://www.ej-technologies.com/download/exe4j/files.html,(目前最新版本为4.2)有的需要安装,有的只要解压缩即可用.我一般用安装的exe4j软件,它们没有什么区别,因此找个可以用的就行了.下载安装后,运行它,接着按步骤操作: 

 

1.运行后直接点Next. 

 

2.选择第二项“JAR in EXE mode”,之后点击Next. 

 

3.在General---Short name of your application框中输入你的应用程序的名字(随便即可),在Directories---Output directory框中输入生成exe后的保存路径,然后Next. 

 

4.在Excutable name框中输入将要生成的exe的名字,“Icon File”是应用程序显示的小图标,不选也行.继续Next. 

 

5.必须先配置Class-Path,点击+号添加文件,即jar文件,如果有用到其它资源需要把资源一起添加进去. 

 

6.General --- Main Class选择主类. 

 

7.Java Version --- Minimum version(低版本必须填写),Maximum version(高版本可以为空),如果都有填写那么高版本的值必须大于低版本的值. 

 

8.勾选Allow JREs with a beta version number以及Only allow JDKs and no JREs.接着Next.到这一步你可以直接finish.这样就把jar转换成exe文件了.你可以点击Click Here to Start the Application按钮测试生成的文件. 

 

到这里就完毕了,对你有没有帮助呢?我想多少解决一些人的烦恼是有的..

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 Java程序注册为Windows的服务

一.运行环境

电脑上应该有java运行环境。

二.需要软件

Java Service Wrapper

下载地址为http://sourceforge.net/projects/wrapper/

三.配置过程

1.首先将java程序打成jar包。

2.Java Service Wrapper包解压。

3.比如要注册成服务的程序项目目录为workapp,那么在这个目录下面新建三个文件夹:

bin、conf、lib。

4.把Java Service Wrapper包中bin目录下的Wrapper.exe、src/bin目录下的App.bat.in、InstallApp-NT.bat.in、UninstallApp-NT.bat.in文件拷贝到workapp的bin目录中,并分别改名为App.bat、InstallApp-NT.bat、UninstallApp-NT.bat。

5.把Java Service Wrapper包中lib目录下的Wrapper.DLL、wrapper.jar拷贝到workapp的lib目录中。并且将项目的jar和所用到的jar都拷贝到该目录。

6.把Java Service Wrapper包中srcconf目录下的wrapper.conf.in拷贝到workapp的conf目录中,并命名为wrapper.conf。

7.修改wrapper.conf配置文件,方法如下:

     主要修改以下几项即可:

    (1)JVM位置:

     wrapper.java.command=C:\jdk1.5.0_07\bin\java 

    (2)运行参数:如:

     wrapper.java.additional.1=-Dprogram.name=run.bat

    (3)你的Java程序所需的jar包必须全部在此标明,注意路径准确:

     wrapper.java.classpath.1=../lib/wrapper.jar

     wrapper.java.classpath.2=../lib/test_fat.jar 

……

    (4)你的Wrapper.DLL或wrapper.jar所在的目录

     wrapper.java.library.path.1=../lib

    (5)MAIN CLASS 此处决定了使用Java Service Wrapper的方式

     wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp

    (6)你的Java应用程序的运行类

     wrapper.app.parameter.1= com.tes.Testjar

    (6)注册为服务的名称和显示名,你可以随意进行设置

     wrapper.ntservice.name=testService

     wrapper.ntservice.displayname= testService

    (7)服务描述信息

     wrapper.ntservice.description= testService 

8.修改好了以后,运行MyApp.bat即可运行你的java程序,这里可以测试配置的是否正确,如果可以运行,证明配置ok。

9.运行InstallApp-NT.bat可以进行服务的注册,UninstallApp-NT.bat为注销服务。

10.运行完注册服务InstallApp-NT.bat可以在 控制面板-管理程序-服务 中看到你注册的服务名称。(如:testService)

 

 

 

 

 

 

 

 

 

 

最近想找个软件来控制电脑的关机时间,在网上找了几个,都是可视化界面的可以设置具体的关机时间的软件。由于我想编写的关机程序是运行在别人机器上,只能让该机器在晚上17 点到23 点25 分才上网,到了23 点25 分就可以自动关机。为了让别人感觉不到这个软件的“存在”(免得使用者自己关闭定时关机软件),所以我想把关机软件注册为服务的方式,运行在后台。这里介绍下如何利用javaService 软件把java 程序注册为windows 服务。

一、  利用javaService 注册java 程序为windows 服务

[1] 下载javaService

访问网址http://javaservice.objectweb.org/ 下载windows 版本的javaService 文件,我下载的是JavaService-2.0.10.rar ,目前最新的版本就是“2.0.10 ”。

[2] 安装javaService

解压我们下载下来的javaServices 到一个目录,我是解压到目录“D:/software/JavaService-2.0.10 ”下(解压到任何目录都可以,最好别解压到中文目录,省的出现问题 )

[3] 编写定时关机代码,见第二章的定时关机代码

1)   具体代码参加第二章,类的名字为:

com.test.timer.TimerShutDownWindows

2)   把编写后的java 文件导出为class 的形式,把导出的类放到目录“D:/software/JavaService-2.0.10/classes/com/test/timer ”下。也就是把导出的com 包放到

“D:/software/JavaService-2.0.10/classes” 目录下。

[4] 注册java 程序为windows 服务

进入“D:/software/JavaService-2.0.10 “目录,执行如下命令:

JavaService.exe -install MyShutDownService "%JAVA_HOME%"/jre/bin/server/jvm.dll -Djava.class.path="%JAVA_HOME%"/lib/tools.jar;D:/software/JavaService-2.0.10/classes -start com.test.timer.TimerShutDownWindows

其中“-install “后面的参数为服务的名称,“-start ”参数后边是要启动的类名,“Djava.class.path ”后面参数中的

“D:/software/JavaService-2.0.10/classe ”地址是我的“TimerShutDownWindows ”类存放的路径,实际应用中修改为自己的classPath 即可。

  这里需要注意几点:

1)   “%JAVA_HOME% ”jdk 目录,如果没有配置jdk 目录,则替换为jdk 的实际绝对地址。

2)   -Djava.class.path 是必须的,因为服务启动的时候无法访问系统的CLASSPATH 变量,所以必须在这里声明;如果jar 比较多,为避免写的命令过长,我们可以使用“-Djava.ext.dirs=jars 所在目录”参数。

3)   服务添加之后,可以在命令行中敲入“services.msc ”命令来查看所有服务,并可以对服务的启动类型(自动启动还是手动启动等)进行修改。

[5] 测试

1)  启动服务

当我们注册完服务后,我们可以通过命令“net start MyShutDownService ”来启动该服务,服务启动后会在D 盘根目录生成my_shutdown.log 日志文件。

2)  关闭服务

如果我们要关闭服务,可以通过命令“net stop MyShutDownService ”来关闭该服务。

3)  删除服务

当我们想删除该服务时,可以使用命令“sc delete MyShutDownService ”来删除该服务。

二、  定时关机代码

package com.test.timer;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.io.PrintWriter;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

public class TimerShutDownWindows {

    /* 检测是否需要关机的时间间隔 */

    private static long m_nDetectInterval = 5000;

    /* 记录上次检测的时间,以毫秒为单位 */

    private static long m_lLastMilliSeconds = 0;

    /* 可以使用电脑的最小小时 */

    private static int m_nUsePCMinHour = 17;

    /* 可以使用电脑的最大小时 */

    private static int m_nUseComputerMaxHour = 23;

    /* 如果分钟超过这个时间,则关机计算机 */

    private static int m_nMinutes = 25;

    /* 记录日志的文件的保存位置 */

    private static String m_sLogFile = "D:" + File.separator

           + "my_shutdown.log";

    /* 记录当前系统是否已经启动自动关闭程序 */

    private static boolean bHasShutDownPC = false;

    /**

      * @param args

      */

    public static void main(String[] args) {

       // 1. 单独开启一个线程去检测

       Thread aThread = new Thread(new TimerDetector());

       aThread.start();

    }

    /**

      * 定义内部类

      *

      * @author Administrator

      *

      */

    static class TimerDetector implements Runnable {

       /*

         * (non-Javadoc)

         *

         * @see java.lang.Runnable#run()

         */

       public void run() {

           // 1. 获取日志文件

           PrintWriter out = null;

           SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

           try {

              out = new PrintWriter(new FileWriter(m_sLogFile, true), true);

           } catch (IOException e1) {

              out = null;

              e1.printStackTrace();

           }

           // 2. 记录服务启动时间

           appendLog(out, " 服务启动时间:" + df.format(new Date()));

           while (true) {

              // 1. 判断当前系统时间是否被修改过

              boolean bShoudShutDownPC = validateShoudShutDownPC(out);

              if (bShoudShutDownPC) {

                  // 验证没通过,强制关机

                  exectueShutDown(out);

              } else {

                  bHasShutDownPC = false;

              }

              // 2. 当前线程休眠下

              try {

                  Thread.sleep(m_nDetectInterval);

              } catch (InterruptedException e) {

                  appendLog(out, e.getMessage());

              }

           }

       }

       /**

         * 验证当前时间是否是需要关机的时间

         *

         * @return

         */

       private boolean validateShoudShutDownPC(PrintWriter _out) {

           // 1. 判断是否修改了系统时间

           boolean bHasModifySystemTime = detectModifySytemTime(_out);

           appendLog(_out, "bHasModifySystemTime :" + bHasModifySystemTime);

           if (bHasModifySystemTime) {

              return bHasModifySystemTime;

           }

           // 2. 没有修改系统时间,则判断当前时间是否超过了指定的时间

           boolean bShoudSleep = nowIsSleepTime();

           appendLog(_out, "bShoudSleep :" + bShoudSleep);

           if (bShoudSleep) {

              return bShoudSleep;

           }

           return false;

       }

       /**

         * 判断当前时间是否应该休息的时间

         *

         * @return

         */

       private boolean nowIsSleepTime() {

           // 1. 获取当前小时和分钟

           Calendar aCalendar = Calendar.getInstance();

           int nHour = aCalendar.get(Calendar.HOUR_OF_DAY);

           int nMinute = aCalendar.get(Calendar.MINUTE);

           // 2. 判断当前小时是否在可以使用PC 的时间内, 最大小时为23

           if (nHour < m_nUsePCMinHour) {

              return true;

           }

           // 23 点需要单独判断,超过23 点30 就应该休息

           if ((nHour >= m_nUseComputerMaxHour) && (nMinute >= m_nMinutes)) {

              return true;

           }

           // 3. 非休息时间

           return false;

       }

       /**

         * 判断是否有人修改了系统时间,如果有人修改了系统时间返回true ,<BR>

         * 否则返回false

         *

         * @return

         */

       private boolean detectModifySytemTime(PrintWriter _out) {

           // 1. 第一次检测系统时间

           if (m_lLastMilliSeconds == 0) {

              m_lLastMilliSeconds = System.currentTimeMillis();

              return false;

           }

           // 2. 检测两次时间的差值

           long lInteral = System.currentTimeMillis() - m_lLastMilliSeconds;

           lInteral = Math.abs(lInteral);

           // 3. 判断两次的时间间隔, 两次结果不一定完全等于 m_nDetectInterval ,允许误差为1 分钟

           long lMaxInterval = m_nDetectInterval + 60 * 1000;

           appendLog(_out, "lInteral :::" + lInteral);

           appendLog(_out, "lMaxInterval :::" + lMaxInterval);

           if (lInteral > lMaxInterval) {

              // 有人修改了系统时间,强制关机

              return true;

           }

           // 4. 只有没人修改时间才记录上次检测时间

           m_lLastMilliSeconds = System.currentTimeMillis();

           return false;

       }

       /**

         * 在指定的流中写入日志信息

         *

         * @param _outWriter

         * @param _sAppendContent

         */

       private void appendLog(PrintWriter _outWriter, String _sAppendContent) {

           if (_outWriter == null) {

              return;

           }

           _outWriter.println(_sAppendContent);

       }

       /**

         * 执行关机命令

         */

       private void exectueShutDown(PrintWriter _out) {

           if (bHasShutDownPC) {

              SimpleDateFormat df = new SimpleDateFormat(

                     "yyyy-MM-dd HH:mm:ss");

              appendLog(_out, " 系统即将关闭, 当前时间:" + df.format(new Date()));

              return;

           }

           appendLog(_out, " 有人修改了系统时间,系统强制关机!");

           // 关机

           try {

              Runtime.getRuntime().exec(

                     "shutdown -s -t 120 -c /" 很晚了,该睡觉了,2 分钟后关闭计算机。/"");

           } catch (IOException e) {

              appendLog(_out, e.getMessage());

           }

           bHasShutDownPC = true;

       }

    }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

有两种方案,一是通过JavaService来运行,二是用exe4j转换成exe程序,分别举例如下:

 

一、JavaService

1.首先到http://javaservice.objectweb.org/下载JavaService,最新版本为2.0.10

2.解压JavaService-2.0.10.zip,将JavaService.exe拷到要运行的java程序目录下

3.进入命令行,切换到java程序目录,运行

JavaService -install 服务名 jvm.dll文件路径  -Djava.class.path=jar文件路径(如有多个用;隔开) -start 启动类 -out 输出重定向 -err 错误信息重定向 -current 工作目录 -depends 依赖的服务 -description 服务描述信息

 

例如:

JavaService -install SampleService "%JAVA_HOME%/jre/bin/server/jvm.dll" -Djava.class.path=%CD%/sample.jar;%CD%/mysql-connector-java-3.0.9-stable-bin.jar -start com.test.SampleService  -out %CD%/stdout.log -err %CD%/stderr.log -current %CD% -depends mysql -description "测试Java服务"

 

卸载的时候为:

JavaService -uninstall 服务名

 

例如:

Javaservice -uninstall SampleService

 

二、通过exe4j将java程序转换为exe程序

1.首先到http://www.ej-technologies.com/download/exe4j/files.php下载exe4j,按向导安装

2.运行exe4j,1.Welcome,直接按Next→2.project type,这里有两个选择,Regular mode和"JAR in EXE" mode,默认即可(如果程序文件较少的话可以用"JAR in EXE",将所有文件打包成一个exe文件),Next

3.输入应用程序的名字和exe输出目录,Next

4.Executable type选Service,Executable name输入要生成的exe文件名,此处可以勾选Icon file,为生成的exe文件选择一个图标,点击Advanced options→设置输出重定向和错误重定向的文件,Next→Description输入服务描述信息,选择启动类型:自动运行(Auto start),手动运行(Start on demand),依赖的服务(Dependencies),Next到第五步Java invocation

5.Class path添加相应的jar文件,然后选择Main class,Next

6.Mininum version,输入最低要求的java版本,如1.3,然后一直Next到完成

7.安装服务,进入命令行,切换到相应目录,运行生成的exe文件加参数 -install,卸载服务为 -uninstall

其它命令:

-install-demand 安装为手动启动模式

-install-auto 安装为自动启动模式

-start 启动服务

-stop 停止服务

-status 服务启动状态

另外"-"也可以换成"--"或者"/"

 

三、通过exe4j还有另外一种方法,就是打包为GUI application,然后通过instsrv.exe和srvany.exe运行为windows服务,方法为在exe4j第四步的时候Executable type选GUI application,其它同上

安装为服务的方法,将instsrv.exe和srvany.exe拷入相应目录,进入命令行,切换到相应目录

instsrv 服务名 %CD%/srvany.exe

然后打开注册表,展开"HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/服务名/Parameters"

新建一字符串值Application,输入生成的exe文件的路径

输入services.msc,找到相应服务,调节启动类型为自动,启动服务,OK!

instsrv.exe和srvany.exe下载地址:

http://www.electrasoft.com/srvany/srvany.exe

http://www.electrasoft.com/srvany/instsrv.exe

 

附:

exe4j是需要注册的,附上一个Exe4J v4.0.2的注册码:L-FLN#79829-19l6l0uowr1kw#585

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics