bat文件启动jar包做成Windows系统服务

此次项目使用的是Win7系统

at文件[含有启动jar包]做成系统服务
Bat文件内容:

@echo off
cd d:/test/
echo in success!
ping 127.1 > test11log.txt
java -jar 1.jar


如果是双击bat文件是可以直接运行jar文件的
但是由于需要系统服务执行bat文件,所以系统必须配好Java环境变量
说一下我的环境变量的配置:
JAVA_HOME: C:\Program Files\Java\jdk1.6.0_26
CLASSPATH: %JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
Path: C:\Program Files\Java\jdk1.6.0_26\bin;


第一步:
下载微软系统小工具 instsrv.exe和srvany.exe至C:\Windows\System32。
第二步:
运行Dos命令代码:instsrv ServiceName C:\Windows\System32\srvany.exe    
    (ServiceName 即你自己定义的服务名称,可以是要作为系统服务启动的应用程序的名称。) 
然后这样执行的结果是:
Unable to find the file at the given path
在仔细检查了参数之后,确定这是由于系统原因所引起的。
最终的原因在于,我们所使用的instsrv和srvany是32位的,而windows现在没有相对应的64位相对应工具发布。而程序本身是没有问题的,问题在于我们将instsrv和Srvany放到windows/system32正面,而在64位系统中,这里应该存放64位的程序,所以最终的解决问题很简单。我们只需要将这两个程序再copy至32位程序应该放置的地方,比如windows/sysWow64目录,这样就可以了。原先的相应步骤以及程序根本就不需要作任何改动。instsrv会自动地找到原先应该放在system32下的程序,而这个程序现在被放置在了SysWow64目录下。
简单一点的解决方法就是,将instsrv和srvany程序在windows/sysWow64目录下再copy一份,相当于在system32和sysWow64下都有程序,这样问题即解决。更底层的原因,也许只有微软能解释了,简而言之,在64位系统下,32位程序是看不到放置在system32下面的程序的,而它应该访问的system32目录被系统映射到了sysWow64目录下了,在运行时系统会自动地将相应的sysWow64目录映射为程序所认为的system32。
参考文档:http://en.wikipedia.org/wiki/WoW64


第三步:
    打开注册表,定位到下面的路径。 
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ServiceName 
    (同样的ServiceName是你刚才安装服务时自定义的服务名称。) 
    如果该服务名下没有Parameters项目,则对服务名称项目右击新建项,名称为Parameters,然后定位到Parameters项,新建以下几个字符串值。 
    名称 Application 值为你要作为服务运行的BAT文件地址。 
    名称 AppDirectory 值为你要作为服务运行的BAT文件所在文件夹路径。 
    名称 AppParameters 值为你要作为服务运行的BAT文件启动所需要的参数。 [暂时没配置]


注:instsrv ServiceName remove 命令可删除服务。

发布了109 篇原创文章 · 获赞 17 · 访问量 31万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章