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?


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.


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();
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.