我正在尝试获取有关已经存在的计划任务的信息(使用为 taskschd.dll 生成的互操作接口):
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 机器上的测试中效果很好。但是,在 Windows 10 上对此进行测试时,有时在访问该Definition属性时会出现异常:
System.ArgumentException: Value does not fall within expected range.
at TaskScheduler.IRegisteredTask.get_Definition()
at MyApp.MainForm..ctor()
在一台机器上,查询时生成此错误的是 HP 系统任务。另一方面,它是使用旧Win32_ScheduledJob界面 ( NetScheduleJobAdd ) 创建的自定义任务。(但是,在 Windows 7 和 8.1 机器上可以成功查询相同的任务。)
(以上代码始终以管理员身份运行。)
这是 Windows 10 上的任务计划程序中的已知错误吗?