Création de tâches planifiées

148

Je travaille sur un projet C # WPF. Je dois autoriser l'utilisateur à créer et à ajouter une tâche planifiée au planificateur de tâches Windows.

Comment pourrais-je faire cela et de quoi ai-je besoin en utilisant des directives et des références, car je ne trouve pas grand-chose en cherchant sur Internet.

Boardy
la source
2
Tout ce dont vous avez besoin est ici: msdn.microsoft.com/en-us/library/aa383614(v=vs.85).aspx . API, exemples et explications sur la façon de réaliser ce dont vous avez besoin par programme.
kroonwijk le

Réponses:

214

Vous pouvez utiliser le wrapper géré du planificateur de tâches :

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

Vous pouvez également utiliser l' API native ou opter pour Quartz.NET . Voir ceci pour plus de détails.

Dmitry
la source
3
Oui, vous devez télécharger et référencer Microsoft.Win32.TaskScheduler.dll. Le lien est dans la réponse.
Dmitry
Ouais désolé, je pensais avoir ajouté la référence, mais pour une raison quelconque, ce n'était pas le cas. Désolé, cela fonctionne très bien. Merci pour votre aide
Boardy
1
@Dmitry comment démarrer une tâche? Avez-vous besoin de l'enregistrer avec le planificateur Windows ou quelque chose?
Haroon
2
Je vois que la référence est pour win32, que faire si mon serveur est 64 bits?
Seichi
2
Comme CodePlex s'arrête dans quelques mois, veuillez prendre note de la page NuGet pour le wrapper géré du planificateur de tâches, à nuget.org/packages/TaskScheduler .
David A. Gray
30

Cela fonctionne pour moi https://www.nuget.org/packages/ASquare.WindowsTaskScheduler/

C'est une API Fluent bien conçue.

//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
la source