Open ruayrod opened 8 years ago
Hi good morning ruayrod,
We're looking over your request; there's a messicservice.vbs into bin folder which do that; please let us to configurate this script properly to run automatically from windows 7 or 10 like a service; we'll answer u as soon as possible.
Ok. Thank you. While I try myself with that file.
Yes, messicservice.vbs is one option. In windows, the messic service is launched by this visual basic script file, but it receives two parameters: the whole classpath (list of jars separated by semicolon ; ), and a second parameter which is the absolute path for the music folder. Then, the call to this vbs could be something like:
messicservice.vbs "../classpath/firstfile.jar;../classpath/secondfile.jar;etc..." c:\mi\path\to\my\musicfolder
so, the problem is just to put as the first param all the jars files in the classpath messic folder. In linux we do this by scripting, you can build the same for windows or just put adhoc all the existing files in classpath folder.
The second option, which in my opinion is better, is to call directly to the monitor app by console. The monitor is the app which start and stop the monitor. Could you (@AlmostLook or @ruayrod ) check if you can for example do this in windows? (I don't have a windows at this moment near)
messic.exe -?
could you tell me if this return a help command menu? if it works, then you can start and stop the service by command. If it is not possible, then there is other option, which is to call directly to the java monitor class. Check that and let me know the result please.
Hi spheras, the first options don't go on, maybe I don't be write correctly. The second don't report any parameter, only it open messic app, it don't report any help text.
Sorry my bad english.
Hi @ruayrod, i will continue in spanish if you feel more comfortable and after translate to english the final solution (in other ticket to alow other persons to read it, in fact we should create a wiki section for this. I think it is very interesting - by the way, do you mind to write it when we finally solve this?? :D, as you see we need a lot of help)
Arrancar messic como servicio es sencillo, desde el punto de vista de las clases javas a las que hay que llamar, aunque no esta documentado. La dificultad estriba en los scripts/binarios que se han creado para cada sistema operativo para facilitar la tarea de levantar el monitor. La applicación de monitor recibe parámetros precisamente para este tipo de cosas, levantar messic, pararlo, etc.. sin necesidad de ventana alguna. El problema es que en el caso de windows, el exe que se ha creado es difícil (no imposible) decirle que le de los parámetros a la clase java.
No he tenido mucho tiempo de mirarlo, pero para que tengas una solución rápida te he creado un fichero bat de ejemplo que llama al monitor directamente (sin exe), al cual sí le puedes pasar parámetros. Crea un fichero .bat que se llame messicservice.bat en la carpeta raiz de messic (en la raíz, no lo copies dentro de la carpeta bin). Este es el contenido que tienes que poner dentro:
SET varClasspath=./classpath/antlr-2.7.7.jar;./classpath/aopalliance-1.0.jar;./classpath/aspectjweaver-1.7.4.jar;./classpath/commons-cli-1.2.jar;./classpath/commons-dbcp-1.4.jar;./classpath/commons-io-2.4.jar;./classpath/commons-logging-1.1.2.jar;./classpath/commons-pool-1.5.4.jar;./classpath/dom4j-1.6.1.jar;./classpath/h2-1.3.171.jar;./classpath/hibernate-commons-annotations-4.0.1.Final.jar;./classpath/hibernate-core-4.2.1.Final.jar;./classpath/hibernate-entitymanager-4.2.1.Final.jar;./classpath/hibernate-jpa-2.0-api-1.0.1.Final.jar;./classpath/javassist-3.15.0-GA.jar;./classpath/jboss-logging-3.1.0.GA.jar;./classpath/jboss-transaction-api_1.1_spec-1.0.1.Final.jar;./classpath/log4j-1.2.14.jar;./classpath/messic-configuration-1.0.1.jar;./classpath/messic-service-1.0.1.jar;./classpath/messic-starter-1.0.1.jar;./classpath/org.apache.felix.framework-4.2.1.jar;./classpath/org.apache.felix.main-4.2.1.jar;./classpath/spring-aop-4.0.0.RELEASE.jar;./classpath/spring-beans-4.0.0.RELEASE.jar;./classpath/springcontext-4.0.0.RELEASE.jar;./classpath/spring-core-4.0.0.RELEASE.jar;./classpath/spring-expression-4.0.0.RELEASE.jar;./classpath/tools-1.4.2.jar
.\bin\jre1.8.0_45\bin\java -cp "%varClasspath%" org.messic.starter.Starter %1 %2 %3 %4 %5 %6
como ves, el fichero lo que hace es llamar a la máquina virtual pasándole los ficheros jars que necesita (están puestos a fuego en el fichero por hacerlo rápido) y al final todos los parámetros que tú uses al llamar al .bat. Entonces, llamando al bat de la siguiente manera, por ejemplo:
c:\Users\MiUsuario\Downloads\messic-1.0.1.app\messicservice.bat -?
vas a ver todas las opciones posibles. De tal forma que si quieres levantar el servidor tienes que escribir:
c:\Users\MiUsuario\Downloads\messic-1.0.1.app\messicservice.bat -gui false -start
y si quieres pararlo:
c:\Users\MiUsuario\Downloads\messic-1.0.1.app\messicservice.bat -gui false -stop
A partir de ahí habria que crear un servicio windows o ponerlo en aplicaciones de inicio de windows. Sinceramente no sé cómo se hace esto, pero seguro que google nos puede decir mucho.
Ahora te pido yo a tí ayuda :D, podrías probar todo esto y documentarnos cómo hacer el servicio en windows, etc?? podría ser de gran ayuda para otros que tengan el mismo problema que tú.
Gracias!!
Bueno, pues después de probar varias veces y que no me funcionara, he descubierto que era fallo mio, hay que ejecutar el archivo .bat en modo administrador y todo funciona perfectamente. Por lo que explico en el siguiente comentario como hacer para el arranque automático desde Windows.
Bien, mejor por imágenes y así no hay mucho que explicar:
1, 2 y 3.- Iniciamos el Programador de Tareas:
4.- Pulsamos en Crear Tarea Básica
5 y 6.- Rellenamos el Nombre para identificarla y pulsamos Siguiente:
7 y 8.- Pinchamos Al Iniciar Sesión y Siguiente:
9 y 10.- Pinchamos en Iniciar un programa y en Siguiente:
11a.- Pulsamos Examinar y buscamos la ruta del archivo .bat, en mi caso lo tengo en el mismo directorio del programa: "C:\Program Files (x86)\messic\messic.app\MessicService.bat" 11b.- Metemos los parametros para ejecutar la tarea: -gui false start 11c.- Metemos la ruta donde se inicia el .bat sin las comillas: "C:\Program Files (x86)\messic\messic.app" 12.- Pulsamos siguiente:
13 y 14.- Marcamos la casilla para Abrir el diálogo Propiedades... pulsamos Finalizar:
15 y 16.- Marcamos Ejecutar con los privilegios más altos y Aceptar:
Cerramos todo y en el próximo reinicio tendremos Messic funcionando sin hacer nada más.
El único problema que le veo a hacer esto, a la hora de ser transparente al usuario que lo ejecuta, es que aparece la ventana de ms-dos durante más de 50-60 segundos hasta que la tarea se ejecuta y se cierra automáticamente dicha ventana. Parece como si le costara arrancar al servicio. Aunque en la ventana ya se puede leer el último "bye!", no se cierra hasta pasado ese tiempo, lo que puede ocasionar el cierre repentino ocasionado por el usuario impaciente...
muchas gracias por las pantallas. En cuanto tenga un hueco voy a ver la forma de publicar esta información en la wiki por si alguien más quiere hacer lo mismo. En cuanto al tema de que se abre la ventana de ms-dos, con un bat no se puede ocultar, pero sí se puede ocultar la ventana usando un vbscript.
aquí hay un ejemplo de cómo debería ser ese vbscript http://www.howtogeek.com/131597/can-i-run-a-windows-batch-file-without-a-visible-command-prompt/
este debería ser el aspecto, creo (no lo he probado):
CreateObject(“Wscript.Shell”).Run “” & WScript.Arguments(0) & “”, 0, False
He probado con esa solución de varias formas, pero no inicia el servicio. Incluso metiendole los argumentos "-gui false start" del .bat dentro del mismo archivo bat para que no compliquen la configuración de la tarea programada no la arranca. Si que lanza la aplicación, ya que quitando el "-gui false" para probar, aparece dicha ventana, pero el "start" no lo ejecuta.. Así que, de momento, la dejo como está. Si alguien comenta alguna otra solución o como meter los parámetros de la tarea de otra forma, aquí me tenéis para probarla. Por si queréis ver lo que he hecho adjunto estas capturas, el manual sería igual que lo de arriba pero cambiando lo siguiente: A - Archivo "Invisible.vbs" tal como comentan en "howtogeek". B- Archivo "MessicService.bat" en el que he eliminado "%1 %2" para colocar los parámetros "-gui false start". Con lo que se queda así: ".....org.messic.starter.Starter -gui false start %3 %4 %5 %6".
11a - Ubicación del archivo wscript.exe, para que no haya problemas he metido la ruta completa. 11b - Los dos argumentos para wscript (incluidas las comillas): "C:\Program Files (x86)\messic\messic.app\invisible.vbs" "C:\Program Files (x86)\messic\messic.app\MessicService.bat" 11c - La ruta de los archivos: C:\Program Files (x86)\messic\messic.app\
A esperar otra ayuda... ;)
mmmm, insisto, yo creo que debería funcionar. :D A ver si encuentro algún hueco la semana que viene para probar esto, me lo dejo pendiente! Esta semana hay que liberar ya sí o sí la 1.1.0 de messic, jeje
@ruayrod he estado probando hoy a lanzar el servicio a través del .exe y se puede perfectamente. Haz lo siguiente:
con eso levantarías el servicio, si pones en lugar de start, stop lo matas, a mi me funciona perfectamente. Si quieres ver lo que está pasando por debajo (el log de consola, te puedo indicar cómo hacerlo)
Bueno, como en la nueva versión tenemos el archivo messic_console.exe, ahora ya no hay que "programar" el archivo .bat por lo que en el paso 11a, hay que escribir lo siguiente (tal y como podeis ver en la captura):
No me arrancaba el servicio automaticamente al iniciar sesión una vez actualizada a la versión 1.1.0, y era porque al actualizar borra el .bat, al mirar en la carpeta encontré el nuevo archivo messic_console.exe y vi que podía usarlo para esto.
Un saludo.
No se si funcionará esto, pero el Programador de Tareas deja exportar la configuración de las mismas, que igual podeis usar para que se genere automáticamente al instalar messic en windows y se importe para el usuario que desee iniciar el servicio al inciar sesión.
En un archivo .xml lo metéis e importáis. Ejemplo de mi archivo "Arrancar servicio Messic.xml":
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.3" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2016-03-28T11:16:06.9567935</Date>
<Author>MiPC\ruayrod</Author>
<Description>Tarea para arrancar servicio Messic cada vez que arranca el ordenador.</Description>
</RegistrationInfo>
<Triggers>
<LogonTrigger>
<Enabled>true</Enabled>
</LogonTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>MiPC\ruayrod</UserId>
<LogonType>InteractiveToken</LogonType>
<RunLevel>HighestAvailable</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>true</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
<UseUnifiedSchedulingEngine>false</UseUnifiedSchedulingEngine>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>P3D</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>"C:\Program Files (x86)\messic\messic.app\messic_console.exe"</Command>
<Arguments>-gui false -start</Arguments>
<WorkingDirectory>C:\Program Files (x86)\messic\messic.app</WorkingDirectory>
</Exec>
</Actions>
</Task>
Imagino que con cada ordenador los datos de las etiquetas "Author", "UserId" y "Command" deben de variar individualmente para cada instalación. En este caso, están mis datos "MiPC\ruayrod", "MiPC\ruayrod" y "C:\Program Files (x86)\messic\messic.app\messic_console.exe", respectivamente.
@ruayrod bien visto lo de messic_console.exe! jeje. Lo he puesto en la versión 1.1.0 para que sea más sencillo ver la consola aunque realmente funciona igual en messic.exe (salvo que no ves lo que devuelve el proceso por la salida estándar). (cómo te va la versión 1.1.0?)
En cuanto a lo que me indicas del script del programador de tareas, parece interesante. Creo que lo mejor sería ver la posibilidad de incluirlo en el instalador de nsis. ¿Conoces el instalador de nsis? Quizás se pueda parametrizar para incluirlo ahí como un complemente opcional. Si quieres echarle un vistazo al script de nsis te puedo indicar más o menos por dónde deberías mirar.
Gracias!!
Ok. Dame datos y me pongo a ello. Un placer intentar colaborar.
genial! tienes alguna experiencia con el instalador de nsis?
Aquí está lo que te hace falta para generar el instalable de nsis
https://github.com/spheras/messic/tree/master/src/messic-assembly/bin/windows
Yo creo que lo suyo sería crear un componente que se pudiera seleccionar o no durante la instalación de nsis, que lo que hiciera fuera de alguna manera meter ese script que indicas en windows o simplemente agregarlo como servicio de windows (algo que antiguamente se podía hacer, pero en los nuevos windows nidea!)
Otra posible solución sería añadir un bat, vbs, o exe en la carpeta de instalación que añadiera el servicio.. es decir que el usuario al ejecutarlo añadiera el servicio. Esto ya no sería durante la instalación, sino post instalación y manualmente ejecutado por el usuario.
Cómo lo ves? si quieres/necesitas más detalles de nsis ya me dices. Podemos hacer un hangout o algo. bye!
Hola Spheras, perdona que no contestara al tema, tuve unos problemas personales que ya casi se han solventado. Ahora ando bastante liado recuperando el tiempo perdido de estos meses, por lo que tengo esto algo aparcado. No te prometo nada, pero lo intentaré en cuanto tenga tiempo para ello.
Hola @ruayrod. Sí, tranquilo. No hay prisa. Estos proyectos funcionan así, con el poco tiempo libre q tenemos. Espero q todo esté bien. Un saludo!
Buenas, echando un ojo al ticket por encima :), si me pasáis el script de arranque os preparo un service para windows con sc, también se puede hacer un vbs muy sencillo con un start lo que sea, pero habría que ejecutar el vbs en el arranque.
Saludos,
Hi, guys, how can I automatically start Messic Service in Windows 7 or 10? Thank you!!