Tworzenie zaplanowanych zadań

148

Pracuję nad projektem C # WPF. Muszę zezwolić użytkownikowi na tworzenie i dodawanie zaplanowanych zadań do Harmonogramu zadań systemu Windows.

Jak mam się do tego zabrać i czego potrzebuję przy użyciu dyrektyw i odniesień, ponieważ nie znajduję zbyt wiele podczas wyszukiwania w Internecie.

Boardy
źródło
2
Wszystko, czego potrzebujesz, jest tutaj: msdn.microsoft.com/en-us/library/aa383614(v=vs.85).aspx . API, przykłady i objaśnienia, jak programowo osiągnąć to, czego potrzebujesz.
kroonwijk

Odpowiedzi:

214

Możesz użyć opakowania zarządzanego przez harmonogram zadań :

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

Alternatywnie możesz użyć natywnego interfejsu API lub przejść do Quartz.NET . Zobacz to, aby uzyskać szczegółowe informacje.

Dmitry
źródło
3
Tak, musisz pobrać i odwoływać się do Microsoft.Win32.TaskScheduler.dll. Link znajduje się w odpowiedzi.
Dmitry
Tak, przepraszam, myślałem, że dodałem odniesienie, ale z jakiegoś powodu tak nie było. Przepraszam, ale działa świetnie. Dzięki za pomoc
Boardy
1
@Dmitry, jak rozpocząć zadanie? Czy musisz to zarejestrować w programie do planowania systemu Windows, czy coś?
Haroon
2
Widzę, że odniesienie dotyczy win32, a co jeśli mój serwer jest 64-bitowy?
Seichi
2
Ponieważ CodePlex jest zamykane za kilka miesięcy, zwróć uwagę na stronę NuGet dla opakowania zarządzanego przez harmonogram zadań pod adresem nuget.org/packages/TaskScheduler .
David A. Gray
30

To działa dla mnie https://www.nuget.org/packages/ASquare.WindowsTaskScheduler/

Jest to ładnie zaprojektowane Fluent API.

//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
źródło