既存のスケジュールされたタスクに関する情報を取得しようとしています (taskschd.dll 用に生成された Interop インターフェイスを使用):
ITaskService ts = new TaskScheduler.TaskScheduler();
ts.Connect();
ITaskFolder tf = ts.GetFolder("\\");
var tasks = tf.GetTasks((int)_TASK_ENUM_FLAGS.TASK_ENUM_HIDDEN).Cast<IRegisteredTask>();
IRegisteredTask task = tasks.FirstOrDefault(t => t.Path == "\\MyTask");
if (task != null) {
var definition = task.Definition;
// do stuff
}
これは、Windows 7 および 8.1 マシンでの私のテストでは非常にうまく機能します。Definition
ただし、これを Windows 10 でテストすると、プロパティにアクセスするときに例外が発生することがあります。
System.ArgumentException: Value does not fall within expected range.
at TaskScheduler.IRegisteredTask.get_Definition()
at MyApp.MainForm..ctor()
1 台のマシンでは、照会時にこのエラーを生成するのは HP システム タスクです。Win32_ScheduledJob
もう 1 つは、古いインターフェイス ( NetScheduleJobAdd )を使用して作成されたカスタム タスクです。(ただし、この同じタスクは、Windows 7 および 8.1 マシンで正常に照会できます。)
(上記のコードは常に管理者として実行されます。)
これは、Windows 10 のタスク スケジューラの既知のバグですか?