3

我有以下代码,它使用 2.5.20 版的 David Hall 的 TaskScheduler Nuget 包,它包装了 Windows 任务计划程序。我正在尝试从特定文件夹中获取所有任务,但是对于这个问题,让我们看一下这段代码:

using (TaskService ts = new TaskService(_ServerName, _TaskSchedulerUsername, _DomainName, _TaskSchedulerPassword)) {
    var folder = ts.GetFolder(TASK_FOLDER_NAME);
}

并且是具有管理员权限的有效本地帐户_TaskSchedulerUsername_TaskSchedulerPassword我使用这些凭据打开 Windows 任务计划程序并手动创建任务,作为测试,并且能够毫无问题地这样做。

_ServerName_DomainName都是一样的,本地机器。

这段代码曾经按原样工作,目前在我的测试服务器(运行 Windows server 2003)上运行没有问题;它还可以在生产 Windows 2012 Server 机器上运行。在我的开发盒(运行 Windows 10)上,UnauthorizedAccessException当我尝试实例化新的 TaskService 实例时,我得到了一个:

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

堆栈跟踪不是很有帮助:

at Microsoft.Win32.TaskScheduler.V2Interop.TaskSchedulerClass.Connect(Object serverName, Object user, Object domain, Object password)
at Microsoft.Win32.TaskScheduler.TaskService.Connect()
at Microsoft.Win32.TaskScheduler.TaskService.EndInit()
at Microsoft.Win32.TaskScheduler.TaskService..ctor(String targetServer, String userName, String accountDomain, String password, Boolean forceV1)
at Test.TaskSchedulerServices.GetTaskSchedules() in C:\Projects\LE\dev\Test\Shared\Services\TaskSchedulerServices.svc.cs:line 54

关于为什么这不会在我的开发盒上运行以及如何处理的任何想法?

4

1 回答 1

1

Windows Vista 中的任务计划程序 API 发生了显着变化。您的 Server 2003 机器在v1上,而新的 Windows 10 机器在v2上。在 v2 的情况下,有问题的 NuGet 包最终会调用ITaskScheduler::Connect. 该文档指定您可以简单地将服务器名称保留为空以连接到本地计算机。(这也适用于 v1 SetTargetComputer。)如果您指定本地用户名,则应将域设置为计算机名。

虽然如果你只是想以当前用户的身份连接到本地机器,你可以使用TaskService不带参数的构造函数。

于 2016-06-13T22:07:50.477 回答