2015-10-21 1 views
0

J'ai converti un fichier java exécutable en un exécutable Windows en utilisant Launch4j. Je l'ai installé et jre dans une boîte de Windows 8, dans le répertoire c: \ program files (x86) \ mycomany, et j'ai exécuté ce qui suit en tant qu'administrateur dans un fichier bat (afin d'utiliser prunsvc pour exécuter l'application en tant que service):prunsvc ne peut pas exécuter java exécutable en tant que service sous Windows 8.1

rem determine the full path to this bat file 
    set thispath=%~dp0 

    set SERVICE_NAME=MyService 
    set PR_INSTALL=%thispath%prunsrv.exe 

    REM set service stdout and stderr 
    set PR_LOGPATH=%thispath% 
    set PR_STDOUTPUT=%thispath%stdout.txt 
    set PR_STDERROR=%thispath%stderr.txt 
    set PR_LOGLEVEL=Error 

    REM path to java 
    set PR_JVM="%thispath%jre1.8.0_45\bin\client\jvm.dll" 
    set PR_CLASSPATH="%thispath%jre1.8.0_45\bin\MyService.exe" 

    REM Startup configuration 
    set PR_STARTUP=auto 
    set PR_STARTMODE=jvm 
    set PR_STARTCLASS=com.mycompany.mainclass 
    set PR_STARTMETHOD=start 

    REM Shutdown configuration 
    set PR_STOPMODE=jvm 
    set PR_STOPCLASS=com.mycompany.mainclass 
    set PR_STOPMETHOD=stop 

    REM JVM configuration 
    set PR_JVMMS=256 
    set PR_JVMMX=1024 
    set PR_JVMSS=4000 
    set PR_JVMOPTIONS=-Duser.language=EN;-Duser.region=en 

    set PR_DESCRIPTION="My Service Description" 

    "%PR_INSTALL%" install %SERVICE_NAME% 

Le service semble s'être correctement installé; cependant quand je fais:

prunsrv.exe start myservice 

à la ligne de commande en tant qu'administrateur, rien ne se passe. Au lieu de cela, je vois ce qui suit dans le journal des événements Windows:

The MyService service terminated with the following service-specific error: Incorrect function.

Répondre

0

Fonction incorrecte - signifie que vous ne l'avez pas implémenter la méthode « arrêt » depuis le réglage a été mis en PR_STOPMETHOD = arrêt. Donc, si vous n'avez pas implémenté une méthode d'arrêt ou une fonction statique. Si vous voulez utiliser "main" à la place, laissez ce paramètre. et mettez PR_STOPPARAMS = stop et implémentez dans votre main la chaîne "stop" de l'argument pour arrêter le service.