2016-05-10 2 views
6

Я создал простое приложение Windows Forms, которое отображает имена и папки всех запланированных задач на машине. Я использую диспетчер планировщика заданий (Microsoft.Win32.TaskScheduler), а ниже - код, который получает имена и отображает их. Однако похоже, что AllTasks фактически не дает мне всех задач. Есть некоторые, которые не отображаются. Что может заставить задачу быть скрытой в этом случае?Task Scheduler Managed Wrapper не показывает все задачи

using (TaskService tsksrvs = new TaskService()) 
{ 
    foreach (Task tsk in tsksrvs.AllTasks) 
    { 
     textJobsList.Text += tsk.Name + " (" + tsk.Folder + ")" + Environment.NewLine; 
    } 
} 
+0

Ну, какие задачи * являются * скрытым? Может быть, у другого пользователя? – nvoigt

+0

@nvoigt Вы правы. Проблема заключается в том, что задачи выполняются другим пользователем, кроме того, который запускает код. Спасибо! – jahrentorp

ответ

2

Как указал @nvoigt, задачи, которые не видны, работают как другой пользователь, чем тот, который выполняет код.

+0

Если ваше приложение работает как администратор, вы можете увидеть их. –

+0

У меня была такая же проблема, но .FindAllTasks (новый RegEx (. *)) Тоже не находил их (тестировал это в LINQPad). Я должен был запустить LINQPad в качестве администратора до того, как .FindAllTasks (...) вернет задачи, которые я искал. – Lee

3

Свойство AllTasks объекта Microsoft.Win32.TaskScheduler.TaskService возвращает только задачи планировщика Windows, где выполнения задачи .Definition.Principal.UserId либо пользователь, запустив программу Или системы Или NETWORK SERVICE Или LOCAL SERVICE Или пусто. Кстати, неважно, какое значение имеет свойство Definition.RegistrationInfo.Author.

Если вам нужно, чтобы получить все задачи для всех пользователей, вы можете выполнить его следующий код:

using Microsoft.Win32.TaskScheduler; 
using System.Diagnostics; 
using System.Text.RegularExpressions; 
...................................... 
       Task[] allTasks = TaskService.Instance.FindAllTasks(new Regex(".*")); // this will list ALL tasks for ALL users 
       foreach (Task tsk in allTasks) 
       { 
        //Do whatever you need here, for example: 
        Debug.WriteLine("TaskName:{0}; Path:{1}; Author:{2}; Principal: {3}; ", tsk.Name, tsk.Path, tsk.Definition.RegistrationInfo.Author, tsk.Definition.Principal.UserId); 
       }