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.