none
Servicio de Windows que cuando se instala en un Windows Server 2016 no ejecuta un archivo .BAT . RRS feed

  • Pregunta

  • Buenas tardes,  Necesito su valiosa ayuda tengo creado un servicio de Windows que analiza los registros de  una tabla en una BD SQL server 2016 y luego ejecuta una instrucción  Shell para ejecutar un archivo BAT. 

    El servicio funciona correctamente en la maquina de desarrollo windows 7 realiza la revisión de la tabla y la ejecución del BAT, pero cuando se instala en el Windows server 2016 realiza el chequeo de la tabla pero no ejecuta el archivo BAT.

    Realice una prueba coloque el mismo código escrito del servicio  y cree una aplicación de windows escritorio y cuando la ejecuto en el Windows Server 2016 haciendo clic todo funciona  correctamente.

    Por favor si me pueden ayudar a comprender por que la ejecución del BAT cuando se instala este servicio en windows server 2016 no lo ejecuta. Se los agradecería mucho

    viernes, 16 de marzo de 2018 15:53

Respuestas

  • Prueba a renombrar el .bat a .cmd. Puede que sea esa la limitación, ya que es posible que el bat lo esté intentando ejecutar con el command.com que existía en Windows XP y Windows 7, pero si no me equivoco no existe en Server 2016. En cambio el .cmd se ejecuta con cmd.exe, que sí que existe en 2016.
    • Marcado como respuesta MMEJIA2050 lunes, 26 de marzo de 2018 6:21
    martes, 20 de marzo de 2018 18:45
  • Aclaremos un matiz: ¿No se llega a ejecutar el propio .bat, o el .bat sí que se ejecuta pero lo que no funciona es alguna instrucción contenida dentro del .bat? Si es el último caso, puede ser que dicha instrucción requiera acceso al escritorio de Windows, cosa que no es lícita en un servicio de Windows 2016 (aunque sí es factible habilitarlo en Windows 7). Si finalmente resulta que el problema es ese, no tiene ningún remedio sencillo, tendrías que sustituir el programa que no rueda por otro que no requiera acceso al escritorio.
    viernes, 16 de marzo de 2018 16:16

Todas las respuestas

  • Aclaremos un matiz: ¿No se llega a ejecutar el propio .bat, o el .bat sí que se ejecuta pero lo que no funciona es alguna instrucción contenida dentro del .bat? Si es el último caso, puede ser que dicha instrucción requiera acceso al escritorio de Windows, cosa que no es lícita en un servicio de Windows 2016 (aunque sí es factible habilitarlo en Windows 7). Si finalmente resulta que el problema es ese, no tiene ningún remedio sencillo, tendrías que sustituir el programa que no rueda por otro que no requiera acceso al escritorio.
    viernes, 16 de marzo de 2018 16:16
  • Buenos Dias, Juan

    Muchas gracias por tu valiosa ayuda. te explico el archivo .BAT funciona correctamente no hay problemas en ninguna instrucción de este archivo, el problema es que cuando quiero invocar este archivo BAT para que se ejecute desde el servicio de windows yo que con la instrucción Shell, este no ejecuta el .BAT

    Realicé una prueba tome todo el codigo del servicio de windows y lo copie exacto en una aplicación windows form y este funcionó correctamente ejecuta el BAT.

    Pero cuando compilo el servicio y lo instalo en el Server 2016 lo inicio , este no me ejecuta el .BAT mas todas las demas funciones de BD si las realiza, me extraña es que no me arroja ningun error con respecto a la ejecución de BAT.  

    Saludos y gracias

    martes, 20 de marzo de 2018 15:59
  • ¿Qué medidas has tomado para verificar que el .bat efectivamente no se ejecuta desde el servicio? Lo digo porque si no se ejecutase, lo normal sería que el código que lo llama arrojase un error. Pero si, por el contrario, sí que se ejecuta el .bat pero lo que no se ejecuta es el comando contenido en el .bat, entonces no se vería nada (suponiendo que el problema es precisamente la prohibición de interactuar con el escritorio). Obviamente, si el problema resulta ser ese, no se resuelve nada probándolo desde una aplicación windows form, porque esa aplicación no sufre de la mencionada limitación.
    martes, 20 de marzo de 2018 17:06
  • Buenas tardes, Alberto y muchas gracias por tu apoyo

    Antes de ejecutar la instruccion  shell mando a escribir en un archivo Log una Bandera en un archvo TXT y después de ejecutar la instrucción shell mando a mando a escribir en el mismo archivo  TXT Log una Bandera que me indica que ya debió ejecutar la instrucción.

    Además la ejecución del BAT genera un archivo TXT con los resultados de un DIR/W 

    D:\>dir/w > d:\resultado.txt ya me percate que la unidad D existiera y el servicio escribe los mensajes en el Log antes de Ejecutar el Shell y después , pero el archivo resultado.txt no se genera.

    Este servicio lo tengo instalado en sistemas operativo con Windows 7 y Windows XP y funciona correctamente pero en el Windows Server 2016 este servicio no ejecuta el BAT lo que no se si es algun tipo de permiso logia que falta configurar en el Server 2016

    Saludos y muchas gracias

    martes, 20 de marzo de 2018 18:10
  • Prueba a renombrar el .bat a .cmd. Puede que sea esa la limitación, ya que es posible que el bat lo esté intentando ejecutar con el command.com que existía en Windows XP y Windows 7, pero si no me equivoco no existe en Server 2016. En cambio el .cmd se ejecuta con cmd.exe, que sí que existe en 2016.
    • Marcado como respuesta MMEJIA2050 lunes, 26 de marzo de 2018 6:21
    martes, 20 de marzo de 2018 18:45
  • Buenos Dias, Alberto voy a probar y te comento los resultados

    Muchas gracias

    miércoles, 21 de marzo de 2018 14:48
  • Buenas tardes Alberto cambié la extensión del archivo .BAT a .CMD y funciona correctamente.

    Muchas gracias por tu valiosa colaboración y pronta ayuda.

    lunes, 26 de marzo de 2018 6:18