Creazione di attività pianificate


148

Sto lavorando a un progetto C # WPF. Devo consentire all'utente di creare e aggiungere un'attività pianificata all'Utilità di pianificazione di Windows.

Come posso fare per fare questo e di cosa ho bisogno usando le direttive e i riferimenti poiché non trovo molto quando cerco su Internet.


2
Tutto ciò di cui hai bisogno è qui: msdn.microsoft.com/en-us/library/aa383614(v=vs.85).aspx . API, esempi e spiegazioni su come ottenere ciò di cui hai bisogno a livello di programmazione.
kroonwijk,

Risposte:


214

È possibile utilizzare il wrapper gestito di Utilità di pianificazione :

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

In alternativa, puoi utilizzare l' API nativa o utilizzare Quartz.NET . Vedi questo per i dettagli.


3
Sì, è necessario scaricare e fare riferimento a Microsoft.Win32.TaskScheduler.dll. Il link è nella risposta.
Dmitry,

Sì, mi dispiace, ho pensato di aver aggiunto il riferimento, ma per qualche motivo non lo era. Mi dispiace che funzioni alla grande però. Grazie per l'aiuto
Boardy,

1
@Dmitry come si avvia un'attività? Devi registrarlo con l'utilità di pianificazione di Windows o qualcosa del genere?
Haroon,

2
Vedo che il riferimento è per win32, cosa succede se il mio server è a 64 bit?
Seichi,

2
Poiché CodePlex si chiuderà da qualche mese, prendere nota della pagina NuGet per il Task Scheduler Managed Wrapper, su nuget.org/packages/TaskScheduler .
David A. Gray,

30

Questo funziona per me https://www.nuget.org/packages/ASquare.WindowsTaskScheduler/

È ben progettato API fluente.

//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();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.