Criando tarefas agendadas

148

Estou trabalhando em um projeto C # WPF. Eu preciso permitir que o usuário crie e adicione uma tarefa agendada ao Agendador de Tarefas do Windows.

Como eu poderia fazer isso e do que eu preciso usando diretivas e referências, pois não encontro muito ao pesquisar na Internet.

Boardy
fonte
2
Tudo o que você precisa está aqui: msdn.microsoft.com/en-us/library/aa383614(v=vs.85).aspx . API, exemplos e explicações sobre como alcançar o que você precisa programaticamente.
kroonwijk 12/09

Respostas:

214

Você pode usar o Wrapper gerenciado pelo Agendador de tarefas :

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");
      }
   }
}

Como alternativa, você pode usar a API nativa ou acessar o Quartz.NET . Veja isto para detalhes.

Dmitry
fonte
3
Sim, você precisa baixar e referenciar Microsoft.Win32.TaskScheduler.dll. O link está na resposta.
Dmitry
Sim, desculpe, pensei ter acrescentado a referência, mas por algum motivo não foi. Desculpe por isso funciona muito bem. Obrigado pela sua ajuda.
Boardy 13/09/11
1
@ Dmitry, como você inicia uma tarefa? Você precisa registrá-lo no agendador do Windows ou algo assim?
Haroon 18/06
2
Vejo que a referência é para win32, e se meu servidor for de 64 bits?
Seichi 22/11
2
Como o CodePlex será encerrado em alguns meses, observe a página do NuGet para o Wrapper gerenciado pelo Agendador de tarefas, em nuget.org/packages/TaskScheduler .
David A. Gray
30

Isso funciona para mim https://www.nuget.org/packages/ASquare.WindowsTaskScheduler/

É uma API fluente bem projetada.

//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
fonte