¿Cómo crear un servicio que ejecute un archivo .bat en Windows 2008 Server?

21

He creado el servicio usando

sc create myService binpath=myservice.bat

Pero cuando lo inicio, falla con el siguiente mensaje de error:

[SC] StartService FAILED 1053:
    The service did not respond to the start or control request in a timely fashion.

En Win2k3 utilicé el srvany.exe del kit de recursos, pero no hay un kit de recursos para win2k8. Por el momento he instalado el srvany.exe en mi máquina, pero no creo que sea la mejor manera de hacerlo.

¡Gracias!

abyx
fuente
1
¿Puede ejecutar un archivo por lotes como servicio? ¿No sería mejor una tarea programada? Sé que si usa un servicio de Windows real, el evento OnLoad debe regresar en unos segundos.
tsilb

Respuestas:

9

Por supuesto, no puede ejecutar un servicio como ese. ¿Intentaste usar srvany en el servidor 2008? Hasta donde sé, no hay una versión 'oficial' de srvany para s2k8, pero siempre puedes intentarlo, ¿no?

EDITAR: ¡Oh, lo olvidé! También utilizamos FireDaemon para ejecutar aplicaciones que no son de servicio como servicios. Sin embargo, no es gratuito y su funcionalidad es demasiado para sus necesidades.

shylent
fuente
Que es lo que escribí que hice.
abyx
hmm .. esto es raro Simplemente se filtró a través de mi cerebro. Lo siento. De cualquier manera, srvany parece ser lo mejor que se puede hacer en esta situación.
shylent
srvany funciona en 2008 (lo uso para instalar y ejecutar Winamp.exe como un servicio en un servidor doméstico) ... pero no puede ejecutar solo un archivo bat.
Oskar Duveborn
24

Use NSSM para ejecutar un archivo .BAT o cualquier archivo .EXE antiguo como servicio. Es casi un reemplazo para SRVANY y es una aplicación sin lujos y sin complicaciones.

http://iain.cx/src/nssm/

Tuve el mismo problema que tú, y NSSM fue la única utilidad que funcionó.

Matthew Blackford
fuente
3
No había oído hablar de esto antes, pero parece ser una herramienta valiosa. Gracias por el consejo.
Skyhawk el
Gracias, funcionó para mí. Aunque todavía estoy buscando opciones para detener el servicio a una hora específica.
Ankit
8

Utilizamos el Programador de tareas para ejecutar tareas cada vez que se inicia la computadora (independientemente de si un usuario ha iniciado sesión o no)

Korayem
fuente
1
para ocultar la ventana, lea esto o esto si no está satisfecho con la ejecución como sistema
JonnyRaa
7

No puede simplemente ejecutar un archivo .BAT o cualquier archivo .EXE antiguo como servicio. Los servicios de Windows no funcionan que usted. Puede usar una utilidad como el Administrador de servicios no succionador (NSSM) o la utilidad SRVANY no gratuita de Microsoft para ejecutar un programa arbitrario como servicio, pero puede encontrar que no obtiene un comportamiento de detención muy "elegante".

Evan Anderson
fuente
3

El comando SC solo agrega las entradas de registro necesarias para un servicio; si el archivo que especifica no es un exe de servicio válido, no lo convertirá en uno.

Batidor
fuente
2

de: esta publicación en los foros de technet: http://social.technet.microsoft.com/Forums/en-US/winserverMigration/thread/98a97aee-c62b-4683-94ab-3777899cf7de/

Esto es lo que debes hacer ...

En el momento de esta publicación, no hay herramientas del Kit de recursos de Windows Server 2008, por lo tanto, obtenga el "srvany.exe" de las "Herramientas del Kit de recursos de Windows Server 2003" y cópielo en una ubicación adecuada en su servidor Win2008 (por ejemplo, C: \ Windows \ System32 \). Use "sc" para crear un nuevo servicio que inicie "srvany" (por ejemplo, sc create MyService binPath = C: \ Windows \ System32 \ srvany.exe DisplayName = "My Custom Service"). Usando RegEdit: cree una clave de "Parámetros" para su servicio (por ejemplo, HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ MyService \ Paramaters \) Usando RegEdit: dentro de la clave "Parámetros" recién creada, cree un valor de cadena llamado "Aplicación" e ingrese la ruta completa a la aplicación que desea ejecutar como un servicio. (No se requieren cotizaciones).

Y eso debería hacerlo.

Nota: algunas aplicaciones almacenan su configuración en una sección del usuario, no en HKEY_LOCAL_MACHINE, por lo que deberá ejecutar la aplicación para configurarla y luego configurar el servicio para que se ejecute como ese usuario.

usuario1977194
fuente
2

prueba esto ... funcionó para mí ...

sc create ServiceTest binpath= "C:\Windows\System32\cmd.exe /C C:\ServiceTest\Jenkins-Slave.bat"
Kushal Gangan
fuente
¡No funcionó para mí también! El mismo error que OP: no se inició a tiempo.
Ravindra HV
Lo mismo: no funcionó.
Spedge
0

Me topé con esta cosa. Aquí está la herramienta llamada Bat_To_Exe_Converter. Es muy fácil convertir cualquier archivo .bat a archivo .exe. Intentalo. Primero descargue el descargador y luego descargará Bat_To_Exe_Converter automáticamente. Realmente me ayudó a crear un servicio que ejecuta mi archivo .bat a través de .exe. http://download.cnet.com/Bat-To-Exe-Converter/3001-2069_4-10555897.html?spi=eae5ab48292cc101b5f0ec370cf99ad0

Ilya
fuente
¡Bienvenido a Server Fault! Si bien esto puede responder teóricamente la pregunta, sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia.
Scott Pack
0

Encontré otras dos opciones que no te harán buscar tu billetera.

Puede tener un sclanzamiento srvanyque luego apunta a su programa. (hay una publicación en el foro que no puedo vincular porque no tengo suficiente representante aquí, aunque sí lo hago en StackOverflow - gruñido)

Estos son los pasos que usó el póster original:

  1. Úselo scpara crear un nuevo servicio que se inicie srvany(p sc create MyService binPath=C:\Windows\System32\srvany.exe DisplayName="My Custom Service". Ej. )
  2. Usando RegEdit: cree una Parametersclave para su servicio (por ejemplo HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService\Parameters\)
  3. Usando RegEdit: dentro de la Parametersclave recién creada , cree un valor de cadena llamado Applicatione ingrese la ruta completa a la aplicación que desea ejecutar como servicio. (No se requieren cotizaciones).

Si eso parece un truco , puede crear un servicio .NET para iniciar su proceso. Si desea omitir algunos pasos, aquí hay un servicio .NET de código abierto que puede iniciar procesos genéricos:

http://www.codeproject.com/KB/system/xyntservice.aspx

Ajústelo a sus necesidades, pero hará la mayor parte de lo que desea de fábrica.

databyte
fuente
¿Y es la srvany que mencionas, la de Win2k3 que no tiene una versión compatible para Win2k8?
LarsH