Evite que aparezca la ventana taskeng.exe


18

Tengo varios procesos programados en mi entorno de Windows 7, principalmente para copias de seguridad, que se supone que se ejecutan en segundo plano.

Sin embargo, en lugar de simplemente hacer su trabajo silenciosamente en segundo plano, el programador de tareas muestra una ventana negra (como la consola) "taskeng.exe". La ventana va delante de todas las demás ventanas. Afortunadamente, no roba el foco de mi teclado, pero bloquea la vista de todo.

taskeng.exe

¿Hay alguna manera de evitar esta ventana, o al menos hacer que aparezca en segundo plano sin robar mi enfoque VISUAL?

Ejemplo editado después de la recompensa aplicada:

Aquí está mi último intento de usar el material WScript (en un archivo llamado RunSignatured.bat):

Set Shell = CreateObject("WScript.Shell")
Shell.Run C:\Users\danh\Bin\signatured.bat, 0, False

El archivo signatured.bat contiene:

cd C:\Users\danh\bin
"C:\Program Files\Java\jre7\bin\java.exe" Signature

Estoy buscando una solución para este problema que funcione en Vista SP2 sin instalar otras herramientas y ejecutará una aplicación Java simple (pero que se ejecuta continuamente) desde el Programador de tareas. Solía ​​hacer que esto funcionara de alguna manera antes de que se instalara mi instalación, pero no puedo entender cómo hacerlo ahora que he restaurado (más o menos) mi caja. (No he conseguido que funcione el esquema WshShell: el archivo bat de destino aparentemente nunca se ejecuta (o se elimina inmediatamente por alguna razón).)
Daniel R Hicks

(El programa Java tiene su propio bucle de temporizador interno, lo que significa que continúa ejecutándose después de que se inicia).
Daniel R Hicks

@DanielRHicks echa un vistazo a esta solución SU que puede ayudarte.
avirk

¿Puede proporcionar el comando real que ejecuta la tarea?
Ƭᴇcʜιᴇ007

@ techie007 - Ver arriba, una vez que se apruebe la edición.
Daniel R Hicks

Respuestas:


8

Más específicamente a la recompensa / ejemplo de Daniel R Hicks, pero creo que todavía se puede aplicar al problema original:

Si se trata de un archivo por lotes que se inicia desde el Programador de tareas, en lugar de simplemente iniciar el archivo por lotes minimizado / invisible, probablemente también deba modificar el archivo por lotes para ejecutar sus comandos de forma invisible.

Entonces cambia:

cd C:\Users\danh\bin
"C:\Program Files\Java\jre7\bin\java.exe" Signature

A algo como:

cd C:\Users\danh\bin
start /b "C:\Program Files\Java\jre7\bin\java.exe" Signature

O tal vez elimine el archivo por lotes completamente y simplemente haga todo desde el script (VBS) que está iniciando directamente desde el Programador de tareas.

Algo como:

Set Shell = CreateObject("WScript.Shell")
Shell.CurrentDirectory = "C:\Users\danh\bin" 
Shell.Run "C:\Program Files\Java\jre7\bin\java.exe Signature", 0, False

Solución implementada por DanH, en respuesta a las sugerencias de techie007, satisfaciendo la recompensa:

Un archivo, llamado RunSignatured.vbs, que contiene:

Set Shell = CreateObject("WScript.Shell")
Shell.CurrentDirectory = "C:\Users\danh\bin" 
Shell.Run "java.exe Signature", 0, False

Tenga en cuenta que lo anterior depende de que java.exe esté en ruta, ya que la técnica no funciona con el espacio en blanco en Archivos de programa al especificar una ruta completa. No hay duda de otras formas de solucionar este problema, pero eso es para que otros lo descubran.

Luego agregue RunSignature.vbscomo el nombre del "programa / script" en la "Acción" en el Programador de tareas.


1
Intenté numerosas variaciones del start /benfoque. Nada parecía eliminar la ventana: creo que ya se creó cuando comienzas a ejecutar el archivo bat, así que para entonces ya es demasiado tarde.
Daniel R Hicks

Para el segundo enfoque, cuando trato de ejecutarlo directamente (haciendo doble clic en el archivo) aparece "Línea: 3 Error: el sistema no puede encontrar el archivo especificado".
Daniel R Hicks

Ese fue un ejemplo, no un código completamente probado. ;) ¿Existe java.exe en la ruta proporcionada? Tal vez pruebe con el lanzamiento de algo simple como "notepad.exe", ya que java.exe puede tener algunas peculiaridades extrañas a veces.
Ƭᴇcʜιᴇ007

(Tenga en cuenta el problema con el espacio en blanco en el nombre de la ruta, no está claro cómo lidiar con eso.)
Daniel R Hicks

(¡Pero eliminar el camino parece funcionar! Aparentemente javaestá avanzando en el camino de búsqueda OK.)
Daniel R Hicks

4

Puede ejecutar las tareas programadas como un usuario diferente, de esa manera no interactuarán con el escritorio interactivo de su cuenta normal. Esto ciertamente parece funcionar en los servidores Windows2003 que administro. Solo tenga cuidado de asegurarse de que los permisos de los archivos y otros detalles de autenticación estén configurados de modo que las tareas puedan acceder a lo que necesitan cuando están como este usuario diferente.

Editar: O en lugar de ejecutar una herramienta de consola directamente, podría tener un pequeño script que lo ejecuta usando WScript.Shell.Run con la opción "minimizar, sin cambio de foco":

' sample script: c:\scripts\test.vbs
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "c:\location\of\tool\utility.exe", 7

luego ejecute esto con el programador de tareas (la línea de comando es algo así como wscript c:\scripts\test.vbs) en lugar de llamar a la herramienta directamente. También debería poder llamar a archivos por lotes y otros scripts de esa manera. También hay una opción de "ocultar completamente" (reemplace el 7 anterior con un 0), aunque en cualquier caso el ocultar / minimizar solo controla la ventana inicial: si la herramienta se abre más por sí misma, entonces aún pueden robar el foco como antes.

Consulte http://msdn.microsoft.com/en-us/library/d5fk67ky%28VS.85%29.aspx para obtener una lista completa de opciones para el método de ejecución.


Me temo que eso no es posible porque necesito mis credenciales de Kerberos para algunas de las tareas.
BlaM

Puede intentar ejecutar la tarea indirectamente y usar el método de ejecución del host de secuencias de comandos de Windows que le permite tener cierto control de cómo se presenta la ventana inicial de una tarea. Ver editar.
David Spillett el

Pregunta similar, con la misma respuesta para usar un vbs: serverfault.com/questions/9038/…
Anthony Hatzopoulos

3

Intente ejecutar su tarea programada de esta manera:

C: \ Windows \ System32 \ cmd.exe / c start /bc:\fullpath\mybackup.bat

El start /bdebe iniciar la aplicación sin necesidad de crear una nueva ventana.

Si esto no funciona, puede crear una secuencia de comandos AutoIt independiente que ocultará la ventana taskeng.exe. Los scripts de AutoIt se pueden compilar en un archivo .exe.

El .exe sería la primera línea en su archivo mybackup.bat. El código de AutoIt se vería así:

WinSetState ("taskeng", @SW_HIDE)

1
No parece funcionar
Daniel R Hicks

1
¡Finalmente una solución que funcionó para mí! Pero solo después de un reinicio.
Fabian Röling

por cierto, en lugar de hacer c: \ Windows \ System32 \ cmd.exe, solo puede hacer% COMSPEC%, que se establece en el intérprete de símbolo del sistema que se utiliza. Para obtener más información, consulte: en.wikipedia.org/wiki/COMSPEC
Brent Rittenhouse


2

La forma más sencilla de ocultar una aplicación iniciada desde el Programador de tareas es establecerla en "Ejecutar si el usuario inició sesión o no". Esta configuración se puede encontrar en la pestaña General de las propiedades de la tarea programada.


1

Aquí está el script SyncToy que uso. Observe las múltiples comillas alrededor de la ubicación del archivo:

' SyncToy Scheduler
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run """C:\Program Files\SyncToy 2.1\SyncToyCmd.exe"" -R" ,7

0

Aparentemente ha instalado SQLyog MySQL GUI , que ha programado la ejecución del Agente de trabajo SQLyog . Parece que es una aplicación de consola que no intenta ocultarse.

Debe buscar en el Programador de tareas una tarea que se refiera a SQLyog y corregir su entrada. Si se trata de una llamada de cmd, intente agregar /ba la lista de parámetros. Si es solo una llamada a un ejecutable, puede corregirlo en vista de esta respuesta mía .

Si tiene problemas para localizar esta entrada, use las ejecuciones automáticas para encontrar cómo se inicia SQLyog. También puede usar regedit para buscar todas las menciones de SQLyog o el nombre de su directorio de instalación.

Por supuesto, también puede desinstalar SQLyog MySQL GUI, si no lo necesita.

Si no instaló SQLyog MySQL GUI, entonces su computadora podría estar infectada. Puede usar Process Monitor para verificar cuándo aparece la ventana emergente, para ver si es el taskeng.exe de system32 o uno de los Lookikes similares de Taskeng.exe .


Ya publicado en otra respuesta, no parece funcionar .
Tamara Wijsman

@TomWijsman: Si te refieres a la parte "/ b", solo la incluí para completarla.
harrymc

0

Estaba teniendo el problema exacto usando SQLyog después de investigar un poco, lo arreglé creando un archivo llamado invisible.vbse insertando este código:

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.CurrentDirectory = "C:\Program Files (x86)\SQLyog\"
WshShell.Run "SJA.exe C:\Users\REPLACE_UR_USER\Desktop\test.xml -lC:\Users\REPLACE_UR_USER\AppData\Roaming\SQLyog\sja.log -sC:\Users\REPLACE_UR_USER\AppData\Roaming\SQLyog\sjasession.xml ", 0

¡Entonces cree un Programador de tareas para ejecutar el invisible.vbsarchivo y listo!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.