Planlanmış Görevler Oluşturma


149

Bir C # WPF projesi üzerinde çalışıyorum. Kullanıcının Windows Görev Zamanlayıcı'ya zamanlanmış bir görev oluşturmasına ve eklemesine izin vermem gerekiyor.

Bunu nasıl yapabilirim ve internette arama yaparken fazla bir şey bulamadığım için yönergeleri ve referansları kullanarak neye ihtiyacım var?


2
İhtiyacınız olan her şey burada: msdn.microsoft.com/en-us/library/aa383614(v=vs.85).aspx . API, ihtiyaç duyduğunuz şeye programlı olarak nasıl ulaşacağınıza ilişkin örnekler ve açıklamalar.
kroonwijk

Yanıtlar:


216

Görev Zamanlayıcı Tarafından Yönetilen Sarmalayıcıyı kullanabilirsiniz :

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

Alternatif olarak yerel API kullanabilir veya Quartz.NET'e geçebilirsiniz . Bkz bu detaylar için.


3
Evet, Microsoft.Win32.TaskScheduler.dll dosyasını indirmeniz ve başvurmanız gerekir. Bağlantı cevapta.
Dmitry

Özür dilerim referansı eklediğimi düşündüm ama nedense öyle değildi. Bunun için üzgünüm ama harika çalışıyor. Yardımınız için teşekkürler
Boardy

1
@Dmitry bir göreve nasıl başlarsınız? Bunu Windows zamanlayıcı veya başka bir şeyle kaydettirmeniz mi gerekiyor?
Haroon

2
Referansın win32 için olduğunu görüyorum, sunucum 64bit ise ne olur?
Seichi

2
CodePlex birkaç ay içinde kapatılacağından, lütfen nuget.org/packages/TaskScheduler adresindeki Görev Zamanlayıcı Yönetilen Sarmalayıcı için NuGet sayfasını not alın .
David A. Gray

30

Bu benim için çalışıyor https://www.nuget.org/packages/ASquare.WindowsTaskScheduler/

Güzel tasarlanmış 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();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.