Как проверить, что запланированная задача существует на сервере с использованием C #? - PullRequest
5 голосов
/ 07 августа 2009

также, как вы можете узнать, работает ли он, включен / отключен и т. Д.?

Ответы [ 3 ]

6 голосов
/ 07 августа 2009

Существует API планировщика задач , который можно использовать для доступа к информации о задачах. (Это библиотека com, но вы можете вызвать ее из C #, используя пинвоки)

В кодпроекте есть статья , которая предоставляет оболочку .net для API.

[Существует также команда schtasks - Подробнее ]

3 голосов
/ 09 мая 2019

API можно установить через NuGet . Имя пакета - «TaskScheduler». (https://github.com/dahall/taskscheduler)

В следующем примере показано, как можно проверить, установлена ​​ли задача, используя ее имя, и, если не установлена, с почасовым выполнением.

using (TaskService service = new TaskService())
{
    if (!service.RootFolder.AllTasks.Any(t => t.Name == "YourScheduledTaskName"))
    {
        Console.WriteLine("YourScheduledTaskName is not installed on this system. Do you want to install it now? (y/n)");
        var answer = Console.ReadLine();
        if (answer == "y")
        {
            var task = service.NewTask();
            task.RegistrationInfo.Description = "YourScheduledTaskDescription";
            task.RegistrationInfo.Author = "YourAuthorName";

            var hourlyTrigger = new DailyTrigger { StartBoundary = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 1, 0 , 0) };
            hourlyTrigger.Repetition.Interval = TimeSpan.FromHours(1);
            task.Triggers.Add(hourlyTrigger);

            var taskExecutablePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "YourScheduledTaskName.exe");
            task.Actions.Add(new ExecAction(taskExecutablePath));

            service.RootFolder.RegisterTaskDefinition("YourScheduledTaskName", task);
        }
    }
}
1 голос
/ 07 августа 2009

Кстати, IRT мое принятое решение, вот код обертки CodeProject (см. http://www.codeproject.com/KB/cs/tsnewlib.aspx), необходимый для проверки того, что запланированная задача существует

Я использую это в интеграционном тесте, поэтому Assert - NUnit.

public static void VerifyTask(string server, string scheduledTaskToFind)
{
     ScheduledTasks st = new ScheduledTasks(server);

     string[] taskNames = st.GetTaskNames();
     List<string> jobs = new List<string>(taskNames);

     Assert.IsTrue(jobs.Contains(scheduledTaskToFind), "unable to find " + scheduledTaskToFind);

     st.Dispose();
}

чтобы проверить, включен ли он, вы можете сделать следующее:

Task task = st.OpenTask(scheduledTaskToFind);
Assert.IsTrue(task.Status != TaskStatus.Disabled);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...