Crear tareas programadas

148

Estoy trabajando en un proyecto C # WPF. Necesito permitir que el usuario cree y agregue una tarea programada al Programador de tareas de Windows.

¿Cómo podría hacer esto y qué uso de directivas y referencias necesito ya que no encuentro mucho cuando busco en Internet?

Boardy
fuente
2
Todo lo que necesita está aquí: msdn.microsoft.com/en-us/library/aa383614(v=vs.85).aspx . API, ejemplos y explicaciones sobre cómo lograr lo que necesita mediante programación.
kroonwijk

Respuestas:

214

Puede usar el Contenedor administrado del Programador de tareas :

using System;
using Microsoft.Win32.TaskScheduler;

class Program
{
   static void Main(string[] args)
   {
      // Get the service on the local machine
      using (TaskService ts = new TaskService())
      {
         // Create a new task definition and assign properties
         TaskDefinition td = ts.NewTask();
         td.RegistrationInfo.Description = "Does something";

         // Create a trigger that will fire the task at this time every other day
         td.Triggers.Add(new DailyTrigger { DaysInterval = 2 });

         // Create an action that will launch Notepad whenever the trigger fires
         td.Actions.Add(new ExecAction("notepad.exe", "c:\\test.log", null));

         // Register the task in the root folder
         ts.RootFolder.RegisterTaskDefinition(@"Test", td);

         // Remove the task we just created
         ts.RootFolder.DeleteTask("Test");
      }
   }
}

Alternativamente, puede usar API nativa o ir a Quartz.NET . Vea esto para más detalles.

Dmitry
fuente
3
Sí, debe descargar y hacer referencia a Microsoft.Win32.TaskScheduler.dll. El enlace está en la respuesta.
Dmitry
Sí, lo siento, pensé que había agregado la referencia, pero por alguna razón no fue así. Lo siento, eso funciona muy bien. Gracias por su ayuda
Boardy
1
@Dmitry, ¿cómo comienzas una tarea? ¿Necesita registrarlo con el planificador de Windows o algo así?
Haroon
2
Veo que la referencia es para win32, ¿y si mi servidor es de 64 bits?
Seichi
2
Dado que CodePlex se cerrará en unos meses, tome nota de la página de NuGet para el Contenedor administrado del programador de tareas, en nuget.org/packages/TaskScheduler .
David A. Gray
30

Esto funciona para mí https://www.nuget.org/packages/ASquare.WindowsTaskScheduler/

Está bien diseñado Fluent API.

//This will create Daily trigger to run every 10 minutes for a duration of 18 hours
SchedulerResponse response = WindowTaskScheduler
    .Configure()
    .CreateTask("TaskName", "C:\\Test.bat")
    .RunDaily()
    .RunEveryXMinutes(10)
    .RunDurationFor(new TimeSpan(18, 0, 0))
    .SetStartDate(new DateTime(2015, 8, 8))
    .SetStartTime(new TimeSpan(8, 0, 0))
    .Execute();
Uday Reddy
fuente