0

我正在尝试获取有关已经存在的计划任务的信息(使用为 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 上的任务计划程序中的已知错误吗?

4

1 回答 1

0

访问定义属性时有时也会出错。

ArgumentException 是一个一般错误,因为变量赋值中不涉及参数。我得到一个更具体的错误:

帐户名称和安全 ID 之间没有映射。(来自 HRESULT 的异常:0x80070534)

当任务绑定到不再存在的帐户时会发生这种情况,因此即使使用管理员帐户询问,也无法检索数据,因为无法验证帐户。

也许同样的错误也会发生在你身上。您可以从计算机获得而不能从另一台计算机获得的任务可能是因为这个,而不是因为任务本身(或 Windows)的问题。您可以通过任务日志查看是否如此,LastRun 日期是否告诉您它是否实际运行,或者它是否不再工作(因此也无法访问)。

于 2018-12-07T17:43:45.187 回答