导致WinRun4j包装的服务的“无法找到服务类”的错误的原因

时间:2013-06-09 09:07:05

标签: java windows service wrapper winrun4j

  

[info]模块名称:C:\ Users \ User \ Documents \ NetBeansProjects \ NETBEANS 6.9.1 \ Desktop_apps \ Test2 \ src \ com \ service \ wrapper \ ServiceWrapper.exe

     

[info]模块INI:C:\ Users \ User \ Documents \ NetBeansProjects \ NETBEANS 6.9.1 \ Desktop_apps \ Test2 \ src \ com \ service \ wrapper \ ServiceWrapper.ini

     

[info]模块目录:C:\ Users \ User \ Documents \ NetBeansProjects \ NETBEANS 6.9.1 \ Desktop_apps \ Test2 \ src \ com \ service \ wrapper \

     

[info] INI Dir:C:\ Users \ User \ Documents \ NetBeansProjects \ NETBEANS 6.9.1 \ Desktop_apps \ Test2 \ src \ com \ service \ wrapper \

     

[info]工作目录设置为:C:\ Users \ User \ Documents \ NetBeansProjects \ NETBEANS 6.9.1 \ Desktop_apps \ Test2 \ src \ com \ service \ wrapper

     

[info]配置vm.location:

     

[info]找到VM:C:\ Program Files(x86)\ Java \ jre7 \ bin \ client \ jvm.dll

     

[info]扩展类路径:C:\ Users \ User \ Documents \ NetBeansProjects \ NETBEANS 6.9.1 \ Desktop_apps \ Test2 \ build \ classes \

     

[info]扩展类路径:C:\ Users \ User \ Documents \ NetBeansProjects \ NETBEANS 6.9.1 \ Desktop_apps \ Test2 \ dist \ lib \ WinRun4J.jar

     

[info]生成的类路径:C:\ Users \ User \ Documents \ NetBeansProjects \ NETBEANS 6.9.1 \ Desktop_apps \ Test2 \ dist \ lib \ WinRun4J.jar

     

[info] VM Args:

     

[info] vmarg.0 = -Djava.class.path = C:\ Users \ User \ Documents \ NetBeansProjects \ NETBEANS   6.9.1 \ Desktop_apps \的Test2 \ DIST \ lib中\ WinRun4J.jar

     

[info]为Native class注册natives

     

[info]为FFI类注册本机

     
    

[错误]无法找到服务类

         

[错误]无法初始化服务:1

  
     

java.lang.NoClassDefFoundError:com / service / wrapper / ServiceWrapper / class   引起:java.lang.ClassNotFoundException:com.service.wrapper.ServiceWrapper。   类

   at java.net.URLClassLoader$1.run(Unknown Source)
   at java.net.URLClassLoader$1.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.net.URLClassLoader.findClass(Unknown Source)
   at java.lang.ClassLoader.loadClass(Unknown Source)
   at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)

这是我为这个包装器写的service.ini ...

  
    

service.class = com.service.wrapper.ServiceWrapper     service.id = Service_Simulation     service.name = Windows_Java_Wrapped_Service     service.description =这是Java服务的示例     service.startup = “启动”     main.class = com.service.wrapper.ServiceWrapper

         

classpath.1 = C:\ Users \ User \ Documents \ NetBeansProjects \ NETBEANS 6.9.1 \ Desktop_apps \ Test2 \ build \ classes \     classpath.2 = C:\ Users \ User \ Documents \ NetBeansProjects \ NETBEANS 6.9.1 \ Desktop_apps \ Test2 \ dist \ lib \ WinRun4J.jar

  

我错过了什么......

1 个答案:

答案 0 :(得分:0)

我相信您在service.ini中使用了两个不兼容的参数。 您必须引入service.classmain.class,但不能同时引入。{/ p>

如果您希望您的.exe始终作为服务执行,您必须使用service.class并在Windows服务管理器中注册它,如下所示:

executable.exe --WinRun4J:RegisterService

如果您希望它是普通应用程序,则必须使用main.class并正常调用它。

如果你想以两种方式执行它,你必须回到像here那样的回旋处。 CopyPasting来自链接:

  

我有相同的要求,大约10左右   服务。每个人也必须可以支持人们指挥   行执行,传递“单次运行”模式的可选参数   操作

     

我只是为每个服务副本创建了一对ini文件   表示每个服务的可执行文件每个服务ini文件是   除了头部之外,它与命令行伙伴相同   如下所示,服务/命令行部分适当地评论:

working.directory=. 
service.class=com.xgs.cfs.services.ServiceControl 
service.id=service_id service.name=Windows Service Name 
service.description=Service Description
#command line app configuration
#main.class=com.xgs.cfs.services.ServiceControl
#console.title=process name
#singleinstance=process
  

该服务从Windows SCM和命令行启动运行   使用批处理文件中的以下命令,存储在更多用户中   友好的位置:

%deploymentroot%/svc_bin/service_name_svc.exe --WinRun4J:ExecuteINI %deploymentroot%/svc_bin/service_name_exe.ini
  

%deploymentroot%是整个过程中使用的环境变量   帮助管理路径的项目。)

     

上面的批处理命令是关键,因为它告诉winrun4j   包装器使用不同的inin文件到默认的可执行文件名。   该服务将从中获取默认名称(service_name_svc.ini)   服务二进制文件夹。

     

它编写的类com.xgs.cfs.services.ServiceControl就这样了   没有依赖于操作的服务控制回调   (即它自动启动,所有正常关闭都是   通过Java关闭挂钩完成整个批次为ctrl-c   尽可能安全。)您可以简单地更改启动类if   虽然我觉得没必要,但仍然需要。