2016-05-10 11 views
6

Ich habe eine einfache Windows Forms-Anwendung erstellt, die die Namen und Ordner aller geplanten Aufgaben auf dem Computer anzeigt. Ich verwende den Taskplaner-gesteuerten Wrapper (Microsoft.Win32.TaskScheduler) und unten ist der Code, der die Namen abruft und sie anzeigt. Es scheint jedoch, als ob AllTasks mir nicht alle Aufgaben gibt. Es gibt einige, die nicht angezeigt werden. Was könnte in diesem Fall dazu führen, dass eine Aufgabe ausgeblendet wird?Taskplaner verwalteter Wrapper zeigt nicht alle Aufgaben an

+0

Nun, welche Aufgaben * sind * versteckt? Vielleicht die eines anderen Benutzers? – nvoigt

+0

@nvoigt Sie haben Recht. Das Problem scheint zu sein, dass die Aufgaben von einem anderen Benutzer ausgeführt werden als dem, der den Code ausführt. Vielen Dank! – jahrentorp

Antwort

2

Wie @nvoigt oben gezeigt, laufen die nicht sichtbaren Aufgaben als ein anderer Benutzer als der, der den Code ausführt.

+0

Wenn Ihre App als Administrator ausgeführt wird, können Sie sie möglicherweise sehen. –

+0

Ich hatte gerade das gleiche Problem, aber .FindAllTasks (neue RegEx (. *)) Fand sie auch nicht (wurde in LINQPad getestet). Ich musste LINQPad als Administrator ausführen, bevor .FindAllTasks (...) die Aufgaben zurückgab, die ich suchte. – Lee

3

Die Eigenschaft AllTasks des Objekts Microsoft.Win32.TaskScheduler.TaskService kehrt nur die Windows-Scheduler Aufgaben, bei denen die .Definition.Principal.UserId Aufgabe ist entweder ein Benutzer das Programm Oder-System Oder NETWORK SERVICE Oder LOCAL SERVICE Oder leer läuft. Übrigens spielt es keine Rolle, welchen Wert die Eigenschaft Definition.RegistrationInfo.Author hat.

Wenn Sie alle Aufgaben für alle Nutzer erhalten müssen, können Sie es durch den folgenden Code ausführen:

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