2016-05-10 17 views
6

マシン上のすべてのスケジュールタスクの名前とフォルダを表示する簡単なWindowsフォームアプリケーションを作成しました。私はタスクスケジューラマネージドラッパー(Microsoft.Win32.TaskScheduler)を使用しています。以下は、名前を取得して表示するコードです。しかし、AllTask​​sが実際に私にすべての仕事を与えていないかのようです。表示されないものもあります。この場合、何がタスクを非表示にする可能性がありますか?タスクスケジューラ管理対象ラッパーにすべてのタスクが表示されない

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

上記で指摘したように、表示されていないタスクは、コードを実行するユーザーとは異なるユーザーとして実行されています。

+0

あなたのアプリが管理者として実行されている場合、それらを見ることができるかもしれません。 –

+0

私はちょうど同じ問題を抱えていましたが、.FindAllTask​​s(新しいRegEx(。*))もそれを見つけられませんでした(LINQPadでこれをテストしていました)。 .FindAllTask​​s(...)が私が探していたタスクを返す前に、管理者としてLINQPadを実行しなければなりませんでした。 – Lee

3

プロパティオブジェクトMicrosoft.Win32.TaskScheduler.TaskService戻り、タスクの.Definition.Principal.UserIdはプログラムそれともシステムまたは NETWORKサービスそれとも LOCAL SERVICE または空を実行している ユーザーのいずれかであるのみ WindowsのスケジューラのタスクのAllTasks。ちなみに、プロパティーDefinition.RegistrationInfo.Authorにはどの値があるかは関係ありません。

すべてのユーザーに対してALLタスクを取得する必要がある場合は、次のコードでそれを達成することができます:タスクは*隠されている*

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); 
       } 
関連する問題