Tengo un proceso demonio que ejecuto en mi máquina cada hora y, aunque marqué la Hidden
casilla, no funciona.
Cada hora, la tarea se ejecuta, pero muestra la ventana de comando negra, en la que se está ejecutando mi aplicación de consola .NET. 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:
Realmente quiero que esté oculto, entonces, ¿cómo puedo solucionarlo?
Respuesta1
Marque la casilla de verificación "Ejecutar si el usuario ha iniciado sesión o no" y el ejecutable se ejecutará en segundo plano.
Respuesta2
¿Por qué la tarea programada de Windows 7 está oculta?debería explicar por qué sucede esto.
También,esta descripción de TechNet dePropiedades generales de la tareaestados:
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 asignarle un nombre. No pueden haber dos tareas con 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 bajo el que se ejecuta la tarea. Para obtener más información, consulte Contexto de seguridad de la tarea.
De forma predeterminada, 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. Una tarea se oculta al hacer clic en la casilla de verificación Oculta en la pestaña General de las Propiedades de la tarea o en el cuadro de diálogo Crear tarea.
¿No implica esto que la casilla de verificación sólo ocultala tarea misma¿Desde la interfaz de usuario del programador y no desde el programa real que está programado?
Respuesta3
Bien, después de investigar un poco más encontréesta respuestaen 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 comentarioseñala que esto otorga plenos derechos a la tarea, lo que podría resultar molesto, pero es aceptable en este caso.
Pero aún así, ¿qué Hidden
hace si no hace esto? ¿Y por qué la cuenta de usuario que ejecuta el programa tendría algo que ver con su visibilidad?
Respuesta4
Dejo la configuración predeterminada y escribo programas cortos personalizados que generan la ejecución sin que se muestre una ventana. Por ejemplo, para ejecutar un archivo por lotes sin que aparezca una ventana del símbolo del sistema, utilice el siguiente código. Configure la tarea para generar "RunBatchFile.exe (ruta_al_archivo_batch)".
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());
}
}
}