Geplante Aufgaben erstellen

148

Ich arbeite an einem C # WPF-Projekt. Ich muss dem Benutzer erlauben, eine geplante Aufgabe zu erstellen und dem Windows-Aufgabenplaner hinzuzufügen.

Wie könnte ich das tun und was brauche ich, um Anweisungen und Verweise zu verwenden, da ich bei der Suche im Internet nicht viel finde.

Boardy
quelle
2
Alles, was Sie brauchen, finden Sie hier: msdn.microsoft.com/en-us/library/aa383614(v=vs.85).aspx . API, Beispiele und Erklärungen, wie Sie programmgesteuert das erreichen, was Sie benötigen.
Kroonwijk

Antworten:

214

Sie können den von Task Scheduler verwalteten Wrapper verwenden :

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

Alternativ können Sie die native API verwenden oder sich für Quartz.NET entscheiden . Siehe dies für Details.

Dmitry
quelle
3
Ja, Sie müssen Microsoft.Win32.TaskScheduler.dll herunterladen und referenzieren. Der Link ist in der Antwort.
Dmitry
Ja, tut mir leid, ich dachte, ich hätte die Referenz hinzugefügt, aber aus irgendeinem Grund war es nicht so. Tut mir leid, aber das funktioniert großartig. Vielen Dank für Ihre Hilfe
Boardy
1
@Dmitry Wie startest du eine Aufgabe? Müssen Sie es beim Windows Scheduler registrieren oder so?
Haroon
2
Ich sehe, dass die Referenz für win32 ist. Was ist, wenn mein Server 64-Bit ist?
Seichi
2
Da CodePlex in einigen Monaten heruntergefahren wird, beachten Sie bitte die NuGet-Seite für den Task Scheduler Managed Wrapper unter nuget.org/packages/TaskScheduler .
David A. Gray
30

Dies funktioniert bei mir https://www.nuget.org/packages/ASquare.WindowsTaskScheduler/

Es ist schön gestaltete 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
quelle