Crear proceso con nombre basado en cmd

Iniciado por motocros_elche, 17 Enero 2015, 11:02 AM

0 Miembros y 1 Visitante están viendo este tema.

motocros_elche

Buenas, estoy tratando de crear una forma de autoupdate de un servidor de un juego y tengo el siguiente problema:

El archivo que inicia el servidor es un .bat así:
RustDedicated.exe -batchmode +server.hostname "Nombre del servidor"

Y tengo otro .bat que incluye un texto con las lineas que actualizan el servidor y una vez hecho ejecuta el .bat mencionado arriba.

(Cuando aparece una nueva actualización el servidor se cierra automáticamente).

Entonces mi idea ha sido utilizar un programa el cual comprueba que el proceso este abierto y si no lo está ejecuta el .bat que actualiza e inicia de nuevo el servidor.

Y aquí el problema:
Los .bat usan el proceso cmd, todos usan el mismo proceso/archivo, que es básicamente la consola, lo que necesito es que tengan un nombre distinto, no se si es posible hacer esto, he pensado en duplicar el archivo cmd.exe pero claro por defecto los .bat utilizan el cmd predeterminado, también he pensado en convertir el .bat a .exe pero no sé si esto tendría algún efecto diferente o si efectivamente tendría el nombre del .exe el propio proceso.

Puedo probar cualquier cosa que me recomendéis, gracias de antemano, un saludo.

_Enko

#1
El .bat ejecuta a RustDedicated.exe... ese es el nombre de proceso que deberías ver si está abierto creo.


Otra alternativa es usar en el .bat siguiente linea al principio

title titulo_de_la_ventana



De esa manera en vez de decir:  c:/WINDOWS/system32..... va a decir:
titulo_de_la_ventana

Luego usas algo como FindWindow y GetWindowText de la winapi para buscar una ventana con ese titutlo.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms633499%28v=vs.85%29.aspx

Saludos.

sabeeee

Recomendaría que lo hagas desde C/C++ todo, hasta lo que pude entender.
"Vengándose, uno iguala a su enemigo; perdonando, uno se muestra superior a él."
Francis Bacon

motocros_elche

Cita de: _Enko en 17 Enero 2015, 15:42 PM
El .bat ejecuta a RustDedicated.exe... ese es el nombre de proceso que deberías ver si está abierto creo.
Si veo ese proceso pero también el de cmd digamos que se usan ambos pero cuando se cierra uno y el programa que comprueba si esta cerrado ejecuta el .bat empieza a volverse loco y a abrir todo el rato uno nuevo ya que tengo otro servidor abierto y ambos usan un mismo proceso con distinta id, pero el programa se vuelve loco como digo por el nombre del proceso más que nada.

Cita de: _Enko en 17 Enero 2015, 15:42 PM
Otra alternativa es usar en el .bat siguiente linea al principio

title titulo_de_la_ventana



De esa manera en vez de decir:  c:/WINDOWS/system32..... va a decir:
titulo_de_la_ventana

Luego usas algo como FindWindow y GetWindowText de la winapi para buscar una ventana con ese titutlo.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms633499%28v=vs.85%29.aspx

Saludos.
Eso había visto pero claro el programa que utilizo me da muchas opciones y lo de la ventana pues me tocaría hacer lo que dices que ya es más tarea aun que no es mala idea.


Cita de: sabeeee en 17 Enero 2015, 16:14 PM
Recomendaría que lo hagas desde C/C++ todo, hasta lo que pude entender.
Esa sería la solución ideal.
______________

He convertido el .bat a un .exe y ha funcionado a la primera (la conversión y ejecución no sé que tal se lo tomará el programa que comprueba el proceso abierto supongo que bien, aún que sería mejor poner todo en el mismo .bat/exe)

el problema que tengo es que cuando lo convierto la web de virustotal me detecta varios posibles virus, y con otro conversor me detecta muchos más pero no se si realmente son falsas alarmas o no, el código .bat obviamente no tiene nada de virus y escaneandolo tampoco da, pero claro puede ser que el .exe convertido tenga procesos normales que la web de virustotal los detecta como peligrosos.

Este es el resultado:
https://www.virustotal.com/es/file/9eb249220b8ec3de2a9991013eb49631d1de0cc1a81d2131e592368a2a8b8f3b/analysis/1421517654/

Este es el conversor que he usado:
http://www.f2ko.de/programs.php?pid=b2e

Sacado de este vídeo el cual tiene bastantes visitas y likes lo que da más confianza:
https://www.youtube.com/watch?v=Jn4iEwc71hE


Creo que ya se podría dar por solucionado excepto por el posible virus pero me da a mi que es falsa alarma, aún no lo he pasado al servidor dedicado por que no me fío y prefiero leer al menos una opinión antes.

Muchas gracias a todos por vuestra ayuda, una vez logre hacerlo pongo la explicación en el post, saludos.

sabeeee

http://sourceforge.net/projects/batchcompiler/ Ese es muy pero muy bueno en mi opinion, yo estoy haciendo un código que traduce realmente el bat a un c, podrías poner el código de tu bat y quizás te podamos ayudar mas.
"Vengándose, uno iguala a su enemigo; perdonando, uno se muestra superior a él."
Francis Bacon

motocros_elche

Cita de: sabeeee en 17 Enero 2015, 19:39 PM
http://sourceforge.net/projects/batchcompiler/ Ese es muy pero muy bueno en mi opinion, yo estoy haciendo un código que traduce realmente el bat a un c, podrías poner el código de tu bat y quizás te podamos ayudar mas.

Muchas gracias, está bastante bien y tiene bastantes opciones.

Por lo que veo cualquier conversor que convierte el .bat a .exe después el .exe aparece como "infectado" pero me parece a mi que eso es totalmente falso.
Link de virustotal: https://www.virustotal.com/es/file/e19839b6b7266ce6b71c62b61d9fd6d73488f6722a45454026f993048ebe5386/analysis/1421565444/

Código del .bat (ya lo he puesto todo en uno):

@echo off
steamcmd +@ShutdownOnFailedCommand 0 +@NoPromptForPassword 1 +login anonymous +force_install_dir F:\RustTest\Rust2 +app_update 258550 validate +quit
@echo off
echo ----------------------------------------
echo Download Completed
echo ----------------------------------------
TIMEOUT 5
@echo off
echo-----------------------------------------
echo Restarting Server
echo-----------------------------------------
@echo off
cd
cd F:\RustTest\Rust2
RustDedicated.exe -batchmode +server.hostname "Nombre del Server" -load +server.port 28017 +server.identity "data" +server.seed 89898989 +rcon.port 5678 +rcon.password "PASS" -server.worldsize 4000 -server.radiation false +server.saveinterval 60 -cfg "server\data\cfg\server.cfg" -logFile "log.txt" -autoupdate


Es bastante simple, voy a proceder a testear el autorestart, saludos.

motocros_elche

Bueno he de decir que ha funcionado todo perfectamente, muchas gracias a todos por vuestra ayuda.

Lo que hice fue convertir ese .bat a un .exe y después utilizar una aplicación que monitoriza ese .exe y en caso de que sea cerrado vuelve a abrirlo.

(Cuando lanzan una actualización el servidor puesto en el .exe se cierra de golpe con lo cual el programa que monitoriza el .exe vuelve a abrirlo y este cada vez que inicia revisa si hay actualizaciones y las aplica y seguidamente inicia el servidor).

Me pillo durmiendo cuando actualizaron y se actualizó perfectamente, ahora es uno de los primeros servidores en ser actualizado gracias a esto y yo no tengo que estar atento a si actualizan o no, para ver si han actualizado miro el .log de programa que monitoriza y me aparece toda la info de cuando ha sido reiniciado el .exe etc.

Resumen, la mejor solución ha sido convertirlo a .exe y utilizar un programa que en caso de que se cierre esa aplicación se vuelva a ejecutar.

Saludos.