UnauthorizedException пытается использовать оболочку Windows TaskScheduler

У меня есть следующий код, в котором используется пакет Nuget TaskScheduler Дэвида Холла версии 2.5.20, который является оболочкой планировщика заданий 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

Любые идеи о том, почему это не будет работать на моем dev box, и что с этим делать?


person Remi Despres-Smyth    schedule 08.06.2016    source источник


Ответы (1)


API планировщика заданий значительно изменился в Windows Vista. Ваш компьютер Server 2003 находится на v1, а новый компьютер с Windows 10 находится на v2. В случае версии 2 рассматриваемый пакет NuGet вызывает ITaskScheduler::Connect. В документации указано, что вы можете просто оставить имя сервера нулевым для подключения к локальной машине. (Это должно работать для версии 1 SetTargetComputer< /a> также.) Домен должен быть установлен на имя компьютера, если вы указываете имя локального пользователя.

Хотя, если вы просто хотите подключиться к локальной машине как текущий пользователь, вы можете просто использовать конструктор TaskService, который не принимает никаких параметров.

person Ben N    schedule 13.06.2016
comment
Это может решить чью-то проблему, но я попытался поменять параметр _ServerName на null и все равно получаю ту же ошибку. Кроме того, не упоминалось в исходном вопросе, но этот точно такой же код уже некоторое время без проблем работает на рабочем сервере Windows 2012. - person Remi Despres-Smyth; 14.06.2016