スケジュールされたタスクの作成


148

C#WPFプロジェクトに取り組んでいます。ユーザーがスケジュールされたタスクを作成してWindowsタスクスケジューラに追加できるようにする必要があります。

これを行うにはどうすればよいのでしょうか。また、インターネットを検索してもあまり見つけられないので、ディレクティブや参照を使用する必要があります。


2
必要なものはすべてここにあります:msdn.microsoft.com/en-us/library/aa383614(v=vs.85).aspx。API、必要なものをプログラムで実現する方法の例と説明。
kroonwijk 2011

回答:


214

タスクスケジューラのマネージラッパーを使用できます。

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

または、ネイティブ API を使用するか、Quartz.NETを使用できます。詳細はこちらをご覧ください。


3
はい、Microsoft.Win32.TaskScheduler.dllをダウンロードして参照する必要があります。リンクは答えにあります。
ドミトリー

申し訳ありませんが、リファレンスを追加したと思ったのですが、何らかの理由で追加されていません。申し訳ありませんが、うまく機能します。ご協力ありがとうございます
Boardy

1
@Dmitryどのようにタスクを開始しますか?Windowsスケジューラなどに登録する必要がありますか?
Haroon

2
参照がwin32であるとわかりましたが、サーバーが64ビットの場合はどうなりますか?
誠一

2
CodePlexは数か月でシャットダウンされるため、タスクスケジューラマネージラッパーのNuGetページ(nuget.org/packages/TaskScheduler)に注意してください
デビッドA.グレイ

30

これは私のために動作します https://www.nuget.org/packages/ASquare.WindowsTaskScheduler/

うまく設計された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();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.