0

WinRun4J でラップされた jar を実行すると、次のエラーが発生します。

[info] Module Name: C:\Users\User\Documents\NetBeansProjects\NETBEANS 6.9.1\Desktop_apps\Test2\src\com\service\wrapper\ServiceWrapper.exe
[info] Module INI: C:\Users\User\Documents\NetBeansProjects\NETBEANS 6.9.1\Desktop_apps\Test2\src\com\service\wrapper\ServiceWrapper.ini
[info] Module Dir: 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] Working directory set to: C:\Users\User\Documents\NetBeansProjects\NETBEANS 6.9.1\Desktop_apps\Test2\src\com\service\wrapper
[info] Configured vm.location:
[info] Found VM: C:\Program Files (x86)\Java\jre7\bin\client\jvm.dll
[info] Expanding Classpath: C:\Users\User\Documents\NetBeansProjects\NETBEANS 6.9.1\Desktop_apps\Test2\build\classes\
[info] Expanding Classpath: C:\Users\User\Documents\NetBeansProjects\NETBEANS 6.9.1\Desktop_apps\Test2\dist\lib\WinRun4J.jar
[info] Generated Classpath: 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] Registering natives for Native class
[info] Registering natives for FFI class
 [err] Could not find service class
 [err] Failed to initialise service: 1
java.lang.NoClassDefFoundError: com/service/wrapper/ServiceWrapper/class
Caused by: java.lang.ClassNotFoundException: com.service.wrapper.ServiceWrapper.
class
        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=This is an Example for Java Service
service.startup="boot"
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

私は何を取りこぼしたか?

4

1 に答える 1

0

service.ini で 2 つの互換性のないパラメータを使用していると思われます。service.classまたは のいずれかを導入する必要がありますmain.classが、両方を導入することはできません。

.exe を常にサービスとして実行する場合は、次のように使用service.classして Windows サービス マネージャーに登録する必要があります。

executable.exe --WinRun4J:RegisterService

通常のアプリケーションにしたい場合は、通常どおりに使用main.classして呼び出す必要があります。

両方の方法で実行したい場合は、ここのようなラウンドアバウトにフォールバックする必要があります。リンクからのコピペ:

約 10 程度のサービスについて、同じ要件があります。また、コマンド ライン実行のためにユーザーをサポートし、「単一実行」モードの操作用にオプションのパラメーターを渡すために、それぞれが利用可能である必要があります。

各サービスを表すサービス実行可能ファイルのコピーごとに、1 組の ini ファイルを作成しただけです。各サービスの ini ファイルは、それに続く head を除いて、コマンド ライン パートナーと同じであり、サービス/コマンド ライン部分は適切にコメントされています。

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%は、パスの管理を支援するためにプロジェクト全体で使用される環境変数です。)

上記のバッチ コマンドは、デフォルトの実行可能ファイル名とは異なる inin ファイルを使用するよう winrun4j ラッパーに指示するため、ここで重要です。サービスは、サービス バイナリ フォルダーから既定の名前 (service_name_svc.ini) を取得します。

クラス com.xgs.cfs.services.ServiceControl は、操作のためのサービス コントロール コールバックに依存しないように記述されています (つまり、自動的に開始され、すべての必要な通常のシャットダウンは、Java シャットダウン フックを介して実行され、全体が次のようになります)。 ctrl-c は可能な限り安全です。) 不要だと思いましたが、必要に応じてスタートアップ クラスを変更するだけでかまいません。

于 2014-05-13T12:18:22.867 に答える