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.


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.


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();
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.