Task Scheduler Managed Wrapperを使用して、サーバーからスケジュールされたタスク情報を取得しています。ドキュメントからほとんど集めた私のコードは次のとおりです。
public List<ScheduledTask> GetScheduledTasks()
{
using (TaskService ts = new TaskService("SERVERNAME", "userId", "domain", "password"))
{
foreach (var scheduledTask in ScheduledTasksToGet)
{
var task = ts.FindTask(scheduledTaskName);
var taskScheduled = new ScheduledTask();
taskScheduled.Name = task.Name;
taskScheduled.LastRunTime = task.LastRunTime;
taskScheduled.LastRunResult = task.LastTaskResult;
scheduledTasks.Add(taskScheduled);
}
}
return scheduledTasks;
}
タスク情報を取得しようとしているサーバーは、2008 R2 サーバーです。取得しようとしているすべてのタスクがルート フォルダーにあることを確認しました。このコードは、Windows 7 マシンでローカルに実行すると正常に動作します。しかし、アプリケーションを 2003 SP2 QA サーバーにデプロイすると、タスクを取得できません。私もこのコードを試しました:
public List<ScheduledTask> GetScheduledTasks()
{
using (TaskService ts = new TaskService("SERVERNAME", "userId", "domain", "password"))
{
EnumerateFolderTasks(ts.RootFolder, tasks);
foreach (var task in tasks)
{
if (ScheduledTasksToGet.Any(t => task.Name.StartsWith(t)))
{
var scheduledTask = new ScheduledTask();
scheduledTask.Name = task.Name;
scheduledTask.LastRunTime = task.LastRunTime;
scheduledTask.LastRunResult = task.LastTaskResult;
scheduledTasks.Add(scheduledTask);
}
}
}
}
private void EnumerateFolderTasks(TaskFolder folder, List<Microsoft.Win32.TaskScheduler.Task> tasks)
{
foreach (Microsoft.Win32.TaskScheduler.Task task in folder.Tasks)
tasks.Add(task);
foreach (TaskFolder subFolder in folder.SubFolders)
EnumerateFolderTasks(subFolder, tasks);
}
繰り返しますが、このコードはローカルでは正常に実行されますが、サーバーでは、10 を期待しているときに 1 つのタスクしか返されません。タスク スケジューラ 1 とタスク スケジューラ 2 には違いがあることを理解しています。SO の他の場所も読んでいます。タスク スケジューラ マネージ ラッパー メソッドの一部は、タスク スケジューラ バージョン 1 では使用できないか、バージョン 2 のように機能しない可能性があります。これが動作の違いの理由であると推測しています。ただし、Web やドキュメントを調べたところ、バージョン 1 で機能するタスクを取得する方法を見つけるのに苦労しています。
どんな援助でも大歓迎です。