2016-05-10 19 views
6

Ho creato una semplice applicazione Windows Form che visualizza i nomi e le cartelle di tutte le attività pianificate sulla macchina. Utilizzo il wrapper gestito dell'Utilità di pianificazione (Microsoft.Win32.TaskScheduler) e di seguito il codice che ottiene i nomi e li visualizza. Tuttavia sembra che AllTasks in realtà non mi dia tutti i compiti. Ce ne sono alcuni che non vengono visualizzati. Cosa potrebbe causare l'occultamento di un'attività in questo caso?Task Scheduler Managed Wrapper non mostra tutte le attività

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

Ebbene, quali attività * sono * nascosto? Forse quelli di un altro utente? – nvoigt

+0

@nvoigt Hai ragione. Il problema sembra essere che le attività sono eseguite da un altro utente rispetto a quello che sta eseguendo il codice. Grazie! – jahrentorp

risposta

2

Come @nvoigt indicate sopra i compiti non visibili si esegue come un utente diverso da quello esecuzione del codice.

+0

Se la tua app funziona come amministratore, potresti vederli. –

+0

Ho appena avuto lo stesso problema, ma .FindAllTasks (nuovo RegEx (. *)) Non li trovava neanche (stava testando questo in LINQPad). Ho dovuto eseguire LINQPad come amministratore prima che .FindAllTasks (...) restituisse le attività che stavo cercando. – Lee

3

La proprietà AllTasks dell'oggetto Microsoft.Win32.TaskScheduler.TaskService rendimenti solo i compiti di pianificazione di Windows in cui il compito .Definition.Principal.UserId è o un utente che esegue il programma O sistema O SERVIZIO DI RETE O SERVIZIO LOCALE O vuota. A proposito, non ha importanza quale valore ha la proprietà Definition.RegistrationInfo.Author.

Se avete bisogno di ottenere tutto il compito per tutti gli utenti, è possibile realizzarlo dal seguente codice:

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