La configuración oculta del Programador de tareas de Windows 7 no funciona

37

Tengo un proceso demonio que ejecuto en mi máquina cada hora, y aunque he marcado la Hiddencasilla, no funciona.Propiedades de tarea

Cada hora, la tarea se ejecuta, pero muestra la ventana de comando negra, en la que se está ejecutando mi aplicación .NET Console. Esto permanece visible hasta que se completa la tarea y luego desaparece. Esto es muy molesto, porque aparece e interrumpe todo lo que estoy haciendo:

ingrese la descripción de la imagen aquí

Realmente lo quiero oculto, entonces, ¿cómo puedo solucionar esto?

Joshua Frank
fuente
posible duplicado de la ventana
Ƭᴇcʜιᴇ007
2
La pregunta vinculada no menciona la configuración Oculto .
bwDraco
@DragonLord Tienes razón, pero es difícil saber si esta pregunta es "¿Por qué no funciona Oculto?", O si en realidad es "¿Cómo evito que se muestre este cuadro?".
Ƭᴇcʜιᴇ007
@ techie007: La pregunta es cómo ocultar la ventana, que es lo que pensé que hace la casilla oculta. Pero ese artículo vinculado trata con los scripts y el programador de tareas de línea de comandos y los scripts de shell, no la GUI del programador de tareas que se muestra en mi publicación. ¿Sabes cómo usar la GUI para lograr esto?
Joshua Frank
En la mayoría de los casos, no puede hacerlo solo desde la GUI del Programador de tareas. Por lo general, debe modificar lo que ejecuta la Acción de la tarea (es decir, un archivo por lotes o un script) para ocultar la ventana secundaria que aparece. Eso es lo que cubre la otra pregunta, y es por eso que lo marqué como un posible engaño. :)
Ƭᴇcʜιᴇ007

Respuestas:

45

Marque la casilla de verificación "Ejecutar si el usuario inició sesión o no" y el ejecutable se ejecutará en segundo plano.

Helecho
fuente
44
Tan sencillo como eso. Esta respuesta debe ser la aceptada.
2013
Gracias. Yo tuve el problema contrario. Yo quería que la consola muestre, pero no fue así!
Randy Stegbauer
12
Esto requiere guardar la contraseña con la tarea y se romperá de forma oculta la próxima vez que cambie la contraseña (lo que generalmente aplican las políticas de dominio en entornos empresariales).
Philipp Munin
@PhilippMunin En ciertos casos de uso, puede evitar marcar la casilla de verificación 'No almacenar contraseña. La tarea solo tendrá acceso a los recursos informáticos locales '', lo que obviará el suministro de la contraseña.
Jimadine
20

¿Por qué la tarea programada de Windows 7 se ejecuta oculta? debería explicar por qué sucede esto.

Además, esta descripción de TechNet de Propiedades generales de la tarea establece:

Las propiedades generales de una tarea se muestran en la pestaña General del cuadro de diálogo Propiedades de la tarea o Crear tarea. Las propiedades generales de una tarea incluyen el nombre de la tarea, el autor, la descripción, las opciones de seguridad, el sistema operativo para el que está configurada la tarea y una propiedad que controla si la tarea está oculta .

Cuando crea una tarea en una carpeta de tareas, debe nombrar la tarea. No hay dos tareas que puedan tener el mismo nombre si están en la misma carpeta de tareas. La descripción de la tarea es opcional.

Las opciones de seguridad de la tarea especifican el contexto de seguridad en el que se ejecuta la tarea. Para obtener más información, consulte Contexto de seguridad de la tarea.

Por defecto, las tareas ocultas no se muestran en la interfaz de usuario del Programador de tareas. Puede ver tareas ocultas cuando se selecciona Mostrar tareas ocultas en el menú Ver. Oculta una tarea cuando hace clic en la casilla de verificación Oculto en la pestaña General del cuadro de diálogo Propiedades de la tarea o Crear tarea.

¿No implica esto que la casilla de verificación solo oculta la tarea en sí de la IU del planificador y no el programa real que está programado?

Karan
fuente
Lo hace sonar así, pero tampoco lo hace; Puedo ver las tareas en el Programador. Sería una IU extraña que funcionaba con objetos que no se podían ver.
Joshua Frank
2
¿Ha marcado Mostrar tareas ocultas en el menú Ver?
Karan
1
Ah, lo hice, así que eso lo explica. Gracias. Por supuesto, como "Oculto" no hace lo que pensaba, no necesito tareas ocultas. Dado que esta es una herramienta solo para administradores, y dado que a los administradores generalmente no les gusta que les oculten cosas, ¿para qué sirve una tarea oculta?
Joshua Frank
2
Quién sabe, desde luego que nunca he usado esa opción. Tu pregunta fue la primera vez que lo busqué para ver qué hacía. :) Por cierto, en lugar de cambiar el usuario a SISTEMA, ¿resuelve el problema al seleccionar "Ejecutar si el usuario inició sesión o no"?
Karan
18

Bien, después de un poco más de investigación, encontré esta respuesta en StackOverflow:

Para configurar una Tarea Programada para que se ejecute en segundo plano, cambie el Usuario que ejecuta la tarea a SISTEMA y no aparecerá nada en su pantalla.

Un comentario señala que esto otorga todos los derechos a la tarea, lo que podría ser molesto, pero es aceptable en este caso.

Pero aún así, ¿qué hace Hidden, si no hace esto? ¿Y por qué la cuenta de usuario que ejecuta el programa tiene algo que ver con si es visible?

Joshua Frank
fuente
Lea mi respuesta anterior, podría explicar lo que hace.
Karan
2
Esta respuesta SU toca la idea de ejecutarlo como un usuario diferente para evitar ver también la salida. No creo que haya ninguna razón específica para ejecutarlo como "Sistema", podría crear un usuario solo para ejecutar esa tarea, con los permisos que elija para otorgarles.
Ƭᴇcʜιᴇ007
Pero, ¿por qué el usuario configurado afectaría la visibilidad de la ventana?
Joshua Frank
1
Tenga en cuenta que la SYSTEMcuenta no tiene acceso a los archivos cifrados EFS de otros usuarios.
Zero3
11

LA ÚLTIMA SOLUCIÓN

  • Cambiar el Usuario que ejecuta la tarea a SISTEMA: ejecutará su comando no bajo su usuario
  • Marcar la casilla "Ejecutar si el usuario inició sesión o no": requiere guardar la contraseña con la tarea y se romperá de forma oculta la próxima vez que cambie la contraseña (lo que generalmente aplican las políticas de dominio en entornos empresariales)

Si eso es un factor decisivo para usted, la solución final es crear un archivo de script JS como el siguiente, que ejecutará su comando en una ventana oculta, espere a que termine su comando y devuelva su código de error:

WScript.CreateObject("WScript.Shell")
.Run('powershell -File C:\\Path\\To\\MyScript.ps1', 0,true);

Guarde esto como archivo js (myjob.js) y agréguelo a su programador de tareas: ingrese la descripción de la imagen aquí Disfrute

Philipp Munin
fuente
Además, debe usar Wscript.exe para ejecutar su script, no Cscript. De lo contrario, la ventana de la consola negra podría aparecer por un momento.
BBK
Aquí hay otro ejemplo de VBScript que funciona para mí: faqforge.com/windows/…
BBK
2

"Ejecutar si el usuario ha iniciado sesión o no" permitirá que la opción oculta funcione. Tenga en cuenta que debe proporcionar sus credenciales después de elegir esto.

Tran Viet Cuong
fuente
1

Ambos :

  • Cambiar el usuario que ejecuta la tarea a SYSTEM "
  • y marcando "Ejecutar si el usuario ha iniciado sesión o no"

evitará la ventana de comando negra, pero tenga en cuenta los inconvenientes: no podrá trabajar con algunas herramientas de automatización de GUI como 'AutoIt' o SendKeys en PowerShell, ya que Windows inicia las tareas en un entorno de estilo sin cabeza.

Gabriel Glenn
fuente
1

Dejo la configuración predeterminada y escribo programas personalizados cortos que generan la ejecución sin que se muestre una ventana. Por ejemplo, para ejecutar un archivo por lotes sin abrir una ventana de símbolo del sistema, use el código a continuación. Establezca la tarea para generar "RunBatchFile.exe (path_to_batch_file)".

class Program
{
    static void Main(string[] args)
    {
        try
        {
            if (args.Length < 1)
            {
                Console.WriteLine("No batch file");
                Console.WriteLine("Usage: RunBatchFile (path)");
                Environment.Exit(1);
            }

            if (!File.Exists(args[0]))
            {
                Console.WriteLine("Batch file {0} not found", args[0]);
                Console.WriteLine("Usage: RunBatchFile (path)");
                Environment.Exit(1);
            }

            // Set to batch file's folder
            string startIn = Path.GetDirectoryName(args[0]);
            if (!string.IsNullOrEmpty(startIn) && Directory.Exists(startIn))
                Directory.SetCurrentDirectory(startIn);

            // Start
            ProcessStartInfo pi = new ProcessStartInfo()
            {
                FileName = args[0],
                UseShellExecute = true,
                WindowStyle = ProcessWindowStyle.Hidden
            };
            Process.Start(pi);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception: " + ex.ToString());
        }
    }
}
AresAvatar
fuente
1
Y supongo que la magia que se oculta específicamente se debe específicamente a la ProcessWindowStyle.Hiddenporción, ¿correcto? Veo algo al respecto aquí: msdn.microsoft.com/en-us/library/…
Pimp Juice IT
Sí, eso es lo que oculta la ventana. Sin ella, la ventana aparecerá.
AresAvatar
1
Este código tal como está escrito funcionará en cualquier cosa que se ejecute con ShellExecute.
AresAvatar
0

Estaba teniendo este problema con las tareas programadas de PowerShell (que estaba implementando a través de GPO). Terminé envolviéndolo en una ventana de comandos:

CMD
/Q /D /C "powershell.exe -Command "& '\\MYDOMAIN\netlogon\MyPowerShellScript.ps1'""
Berwin22
fuente
Si bien esto puede responder la pregunta, sería una mejor respuesta si pudiera proporcionar alguna explicación de por qué lo hace.
DavidPostill