예약 된 작업 만들기


148

C # WPF 프로젝트를 진행 중입니다. 사용자가 예약 된 작업을 만들어 Windows 작업 스케줄러에 추가 할 수 있도록해야합니다.

인터넷을 검색 할 때 많이 찾지 못해 어떻게 해야하는지, 지시문과 참조를 사용하는 방법은 무엇입니까?


2
필요한 것은 여기 ( msdn.microsoft.com/en-us/library/aa383614(v=vs.85).aspx) 입니다. 프로그래밍 방식으로 필요한 것을 달성하는 방법에 대한 API, 예제 및 설명.
kroonwijk

답변:


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을 다운로드하고 참조해야합니다. 링크가 답에 있습니다.
Dmitry

죄송하지만 참조를 추가했다고 생각했지만 어떤 이유로 든 그렇지 않았습니다. 죄송하지만 잘 작동합니다. 도와 주셔서 감사합니다
Boardy

1
@Dmitry 어떻게 작업을 시작합니까? Windows 스케줄러 또는 다른 것으로 등록해야합니까?
Haroon

2
참조가 win32에 대한 것임을 알 수 있습니다. 서버가 64 비트이면 어떻게됩니까?
세이치

2
몇 개월 내에 CodePlex가 종료되므로 nuget.org/packages/TaskScheduler 의 작업 스케줄러 관리 래퍼에 대한 NuGet 페이지를 참고하십시오 .
David A. Grey

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.