J'essaie d'installer et de démarrer un service avec prunsrv.exe pour une application.
Je peux installer le service, mais le service ne démarre pas et me donne une erreur
La configuration utilisée pour installer le service à l'aide de prunsrv.exe est également indiquée ci-dessous.
set SERVICE_NAME=TestService
REM Service log configuration
set PR_LOGPREFIX=%SERVICE_NAME%
set PR_LOGPATH=D:\setups\Commons_Daemon\commons-daemon-1.0.14-bin-windows\logs
set PR_STDOUTPUT=auto
set PR_STDERROR=auto
set PR_LOGLEVEL=INFO
REM Path to Java installation
set PR_JVM=C:\Program Files\Java\jre1.6.0_04\bin\client\jvm.dll
set PR_CLASSPATH=D:\setups\Commons_Daemon\commons-daemon-1.0.14-bin-windows\temp.jar;
REM Startup configuration
set PR_STARTUP=auto
set PR_STARTMODE=Java
set PR_STARTCLASS=Trys.AppLauncher
set PR_STARTMETHOD=start
REM Shutdown configuration
set PR_STOPMODE=Java
set PR_STOPCLASS=Trys.AppLauncher
set PR_STOPMETHOD=stop
REM JVM configuration
set PR_JVMMS=64
set PR_JVMMX=128
set PR_JVMSS=4000
REM Install service
prunsrv.exe //IS//%SERVICE_NAME%
La configuration ci-dessus est empaquetée dans un fichier de commandes et est exécutée pour installer le service.
De plus, les fichiers journaux ne sont pas générés, ce qui ne permet même pas un débogage.
S'il vous plaît dites-moi où je me trompe
La raison de cette erreur est que je n’ai pas renommé prunsrv.exe
en TestService.exe
. De même, Prunmgr.exe doit être TestServicew.exe.
Il est très important que ces fichiers soient renommés.
l’un des problèmes possibles est l’utilisation de prunsvr.exe
incorrect. pour l'installation Java 64 bits, utilisez AMD64/prunsvr.exe
, pour l'installation Java 32 bits, utilisez /prunsvr.exe
dans le fichier commons-deamon-xxx-bin-windows.Zip.
Cela pourrait être beaucoup de choses. Vérifiez d'abord les journaux. La valeur par défaut est à ...
% SystemRoot%\System32\LogFiles\Apache
À partir de là, vous devriez pouvoir obtenir une erreur plus spécifique. Par exemple. Classpath, chemin Java ou une autre option non valide.
Si vous démarrez le service à partir du gestionnaire de services et non de la ligne de commande, vous devez définir CLASSPATH, Java_OPTS, etc. dans le registre. De ici :
Les définitions de service de base sont conservées sous la clé de registre:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<ServiceName>
Des paramètres supplémentaires sont stockés dans le registre à l'adresse:
HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\ProcRun 2.0\<ServiceName>\Parameters
Sous Windows 64 bits, procrun utilise toujours une vue de registre 32 bits pour stocker la configuration. Cela signifie que les paramètres seront stockés à l'intérieur:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\ProcRun 2.0\<ServiceName>
J'ai pu exécuter le service sur mon ordinateur local, mais la même erreur s'est produite sur un VM sous Windows 2012R2.
Le problème a été causé par deux raisons:
Sur le VM, j'ai utilisé une installation JDK au lieu d'un simple JRE et Java_HOME a pointé vers le dossier bin JDK. J'ai dû remplacer le paramètre --Jvm de "auto" par le fichier jvm.dll situé dans le sous-dossier JRE.
Bien que j'ai changé le paramètre --Jvm, le service a toujours montré l'erreur au démarrage. J'ai également dû utiliser la version AMD64 de prunsrv.exe pour résoudre le problème.
J'ai eu le même problème dans mon ordinateur portable, mais il fonctionnait sur d'autres ordinateurs portables qui ont la même configuration.
J'ai vérifié %SystemRoot%\System32\LogFiles\Apache\commons-daemon.log
. J'ai trouvé l'erreur suivante Fichier image manquant ,
Ensuite, j'ai découvert qu'il fallait mettre des guillemets doubles sur tous les paramètres. Sur votre exemple, si vous essayez
pushd %CD%
Essayez ceci ci-dessous.
"prunsrv.exe" //IS//%SERVICE_NAME%
--Startup="%PR_STARTUP%"
--Jvm="%PR_JVM%"
--Classpath="%PR_CLASSPATH%"
--StartMode="jvm"
--StopMode="jvm"
--StartClass="%PR_STARTCLASS%"
--StartMethod="%PR_STARTMETHOD%"
--StopClass="%PR_STOPCLASS%"
[__. .____.]--StopMethod="%PR_STOPMETHOD%"
EXEMPLE D'EXEMPLE http://www.Eclipse.org/jetty/documentation/current/startup-windows-service.html
Au cas où quelqu'un le jugerait utile. J'avais le même problème "La zone de données transmise à un appel système est trop petite". Ceci est dû au fait que le programme ne peut pas trouver jvm.dll dans StartMode = jvm.
Solution: tout dépend de votre StartMode. 1) si "--StartMode" est jvm, vous devez spécifier le paramètre "--jvm" comme chemin d'accès à jvm.dll 2) si "- StartMode "est le paramètre Java ou exe" --jvm "défini sur auto (votre programme sera lancé en tant que processus distinct nommé Java.exe)
Juste comparé à un de mes scripts d’installation, la seule chose que j’aperçois immédiatement est que vous devriez peut-être faire en sorte que vos paramètres de mémoire ressemblent à
REM JVM configuration
set PR_JVMMS=64m
set PR_JVMMX=128m
set PR_JVMSS=128m
Et au fait, JRE 1.6.0_04 est un peu obsolète ...
Gyroscope HTH
J'ai eu la même erreur, mais tout ce que je devais faire était d'exécuter le script en tant qu'administrateur (sur Windows Server 2012) ... Apparemment, le système d'autorisation sur Windows 2012 a changé: ex. sur Windows Server 2008, cette erreur ne s'est pas produite (même script).