2011-09-12 8 views
104

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

Come potrei andare a fare questo e che uso di direttive e riferimenti ho bisogno in quanto non trovo molto durante la ricerca su Internet.

+1

Tutto ciò che serve è qui: http://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

risposta

171

È possibile utilizzare Task Scheduler Managed Wrapper:

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 è possibile utilizzare native API o andare per Quartz.NET. Vedi this per i dettagli.

+2

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

+0

Mi spiace pensavo di aver aggiunto il riferimento ma per qualche motivo non lo era. Mi dispiace, ma funziona benissimo. Grazie per il tuo aiuto – Boardy

+1

@Dmitry come si avvia un'attività? Hai bisogno di registrarlo con lo schedulatore di Windows o qualcosa del genere? – Haroon

17

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

Si è 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(); 
+1

C'è un modo per memorizzare queste informazioni in un database del server SQL? – Fearcoder