Situación
Tengo un script por lotes que prepara algunos archivos, ejecuta un programa ( .exe
) y luego elimina dichos archivos.
Esta tarea debería ejecutarse cada hora, así que estoy tratando de configurar esto usando Tareas programadas. El problema es que el programa mencionado anteriormente no se ejecuta correctamente cuando se invoca desde la tarea (ni a través del .bat
script ni cuando se llama .exe
directamente), pero no recibo ningún mensaje de advertencia o error en los registros.
Preparar
La tarea está configurada para ejecutarse como una cuenta de servicio de Windows que tiene todos los privilegios configurados correctamente. Cuando uso esta cuenta para iniciar sesión a través de RDP, puedo ejecutar .bat
y .exe
directamente sin problemas, pero aún así la tarea parece no hacer nada. Esto se observa fácilmente porque el programa siempre modifica un archivo y la modificación en la marca de tiempo no cambia a través de la tarea.
En los registros de tareas programadas, recibo los mensajes de información para la tarea que inicia un proceso, sale, etc. Sin embargo, el "código de resultado" es 111
(intenté buscarlo en Google sin suerte, la única asociación que obtengo es "el nombre del archivo es demasiado largo" ", que es completamente irrelevante AFAIK). En los registros de la aplicación, no obtengo absolutamente nada.
Lo que sospecho es el problema.
El programa es una vieja monstruosidad que genera algún tipo de pantalla de bienvenida (en realidad es una ventana normal), aunque la GUI no es necesaria porque no requiere interacción y se cierra después de las operaciones. La ventana aparece durante unos 2 segundos.
Sospecho que este requisito para una GUI tiene algo que ver con la falla de la tarea, pero no estoy seguro. Cuando inicio sesión con el usuario con el que se ejecuta la tarea (a través de RDP), no aparece ninguna ventana cuando inicio la tarea programada.
Editar sobre la GUI
He creado un ejecutable C # muy pequeño que inicia el programa sin la ventana principal (usando ProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden
). Incluso de esta manera, la tarea programada aún no puede iniciar el programa correctamente, pero el código de retorno es ahora 0
.
Actualizar
Cuando configuro la tarea para que diga "ejecutar si el usuario inició sesión o no", y la run with highest privileges
opción no está marcada , el valor de error es 2147943859
.
¿Qué puedo hacer para solucionar problemas?
SO = Windows Server 2008 R2 SP1
Si necesita más información, hágamelo saber en los comentarios.
.exe
"programa" con parámetros desde un script, la entrada debe proporcionarse adecuadamente como argumento.Respuestas:
Creo que su problema tiene que ver con los permisos de la cuenta que se está utilizando para ejecutar la tarea o con el contexto de la cuenta que existe al intentar ejecutar la tarea.
Prueba de requisito de sesión de consola
Es posible que su .EXE se ejecute en
Console
sesión (también conocido como Sesión 0) en la computadora. Para probar esto:QWINSTA
, observe laSESSIONNAME
columna y confirme que el>
indicador está al ladoconsole
, en otras palabras, debería aparecer como>console
)Si la tarea se ejecuta correctamente, intente programar la tarea con
SCHTASKS.EXE
el/IT
parámetro. De lo contrario, es posible que no tenga más remedio que configurar la computadora para iniciar sesión automáticamente como su cuenta de usuario de servicio y ejecutar la tarea como un programa de inicio.Verificar permisos
Además, como ya he sugerido, verifique lo siguiente para confirmar que la cuenta utilizada para ejecutar la tarea está autorizada correctamente:
Computer Configuration/Windows Settings/Security Settings/Local Policies/User Rights Assignments
)Effective Permissions
pestaña en las Propiedades del archivo / carpeta enSecurity > Advanced
Cosas adicionales para verificar / probar
Agregue un poco de registro a su archivo por lotes. Después de cada línea que se ejecuta, haga que escriba algo de salida en un archivo de registro para que sepa dónde se está atascando. Por ejemplo:
Intente ejecutar su .EXE con
START
, por ejemploSTART "myTitle" "C:\full\path\to\my.EXE"
fuente
Estoy respondiendo a una publicación anterior en caso de que ayude a alguien más. Tuve el mismo problema. El registro de eventos decía que el programa se completaba normalmente, pero ni siquiera la primera línea de código escribiría en el registro por mí. Terminó siendo la opción "Iniciar en" en el Programador de tareas. Se me ocurrió que el programa funcionaba bien desde la línea de comandos cuando estaba en el directorio actual. Hay archivos de manifiesto y otras dependencias en el mismo directorio. Entonces, si le dice al trabajo programado que comience en el mismo directorio que el EXE, puede obtener resultados favorables. Fue la solución para mí.
fuente
tal vez esto te ayuda?
/programming/6939548/a-workaround-for-the-fact-that-a-scheduled-task-in-windows-requires-a-user-to-be
Tuvimos un problema similar y su única solución fue que hicimos una cuenta especial en el servidor con inicio de sesión automático. Entonces, si la tarea se ejecutó bajo el usuario ya registrado, nuestro .exe funcionó bien ...
Sé que esta no es una solución muy buena, pero para nosotros fue lo único que funcionó. No sé si esto funciona para usted ... (Pero con esta solución, debe verificar si el usuario realmente ha iniciado sesión todo el tiempo ...)
fuente
Windows Vista/Windows Server 2008
oWindows 7/Windows Server 2008 R2
. Parece que no hay diferencia.Los muchachos de la compañía que administra los servidores de nuestros clientes dijeron que un programa GUI no se ejecutaría a través de tareas programadas de ninguna manera.
Usan un sistema de monitoreo que también tiene características de programación de tareas. Lo han configurado a través de eso y parece funcionar.
Lamento no haber tenido la oportunidad de evaluar más sugerencias aquí, pero gracias por intentar ayudar de todos modos. Espero que pueda ayudar a otros en el futuro, lo cual creo que ciertamente ayudará.
fuente
Estaba intentando iniciar un viejo programa VB6 usando el programador de tareas en un servidor Windows 2008 R2. La aplicación se ejecutaría desde el exe, a través de un archivo por lotes o haciendo clic en un acceso directo, pero no se ejecutaría desde el programador de tareas. Encontré que cuando los archivos de configuración para la aplicación, que estaban almacenados en la carpeta de aplicaciones en el directorio C: \ archivos de programa (x86), se copiaron a la carpeta de la aplicación en c: \ programdata. El planificador trabajó. parece que cmd.exe aplica la configuración desde una ubicación diferente a la utilizada por el programador de tareas. Si su aplicación tiene archivos de configuración, puede intentar moverlos a la carpeta c: \ programdata \ application.
fuente
¿Está haciendo referencia a alguna unidad de red asignada en su script o programa? Tuve un problema similar hace un tiempo donde mi tarea programada no se ejecutaría, y no podía entender por qué. Cambiar las rutas a rutas UNC lo resolvió para mí.
Cambiar
T:\Apps\MyProgram.exe
a\\MyServer\MyShare\Apps\MyProgram.exe
fuente
C:
disco local .2147943859 convertido a Hex es 800705b3, que un viaje rápido a Google me dice que significa "No se pudo iniciar el programa de instalación en la computadora. Esta operación requiere una estación de ventana interactiva".
Ahora, puede haber alguna forma de hacer que se ejecute de forma interactiva sin usar PSEXEC (de Sysinternals), pero dado que ya sé cómo hacerlo a través de PSEXEC, eso es lo que usaría.
PSExec: http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx
Por lo tanto, cambie su acción para anteponer todo con psexec.exe -i (y -h si lo necesita elevado) y debería funcionar.
He intentado esto en Windows Server 2008 R2 SP1 con lo siguiente en mi 'acción':
y luego los parámetros:
Cuando ejecuto manualmente la tarea (ya que no tengo programada), obtengo un bloc de notas elevado ejecutándose en mi sesión actual.
fuente
¿Quizás la respuesta a esta pregunta ayudará a alguien más a leer este hilo?
/programming/32589381/
Resumen: Las tareas programadas de Windows 2012 no ven las variables de entorno correctas, incluida
PATH
la cuenta en la que la tarea está configurada para ejecutarse.Leí todo esto bastante tiempo antes de resolver lo anterior. (Cuál fue mi propio problema que me llevó a la misma pregunta del OP).
Una vez que (¡por fin!) Sepa esto, es bastante fácil probarlo (según la respuesta de stackoverflow), verlo sucediendo y solucionarlo ...
fuente