c #: Создать запланированную задачу Windows от имени другого пользователя - PullRequest
0 голосов
/ 18 февраля 2019

Я создаю запланированные задачи Windows динамически из c #, используя встроенные библиотеки TaskService и TaskDefinition.

Но для некоторых из них нам нужно создать их для запуска от имени другого пользователя (локальная служба илиСетевой сервис).Поскольку задачи создаются и удаляются динамически, мы не можем редактировать их все вручную, чтобы изменить пользователя.Нам нужно сделать это с помощью кода.Возможно ли это?

Я пробовал следующие настройки:

TaskDefinition.Principal.Id = "NETWORK SERVICE";
TaskDefinition.Principal.LogonType = TaskLogonType.ServiceAccount;

, но при создании задачи возникает ошибка:

Система.Runtime.InteropServices.COMException: '(52,4): Задача:'

Без этих двух строк он работает, но создает их как зарегистрированный пользователь.

1 Ответ

0 голосов
/ 18 февраля 2019

Я немного поиграл с планировщиком заданий и повторил вашу проблему.Я верю, что нашел кое-что, может быть, они могут помочь.

1. Во-первых, если вы выполняете задачи в отладчике с использованием учетных записей служб, вы должны убедиться, что ваша Visual Studio или другая среда IDE запущены с правами администратора, чтобы убедиться, что у вас есть правильные права навыполните эту задачу.

2. Я не уверен, если вы сделаете это позже в своем коде, но чтобы сохранить задачу и запустить ее как СЕТЕВУЮ СЕРВИСУ, мне пришлось определить Network Serviceкак NT AUTHORITY\\NETWORKSERVICE как в принципе, так и в методе RegisterTaskDefinition:

TaskService tService = new TaskService();
TaskDefinition tDefinition = tService.NewTask();
tDefinition.Principal.Id = "NT AUTHORITY\\NETWORKSERVICE";
tDefinition.Principal.LogonType = TaskLogonType.ServiceAccount;
tDefinition.RegistrationInfo.Description = "Testing";

tDefinition.Triggers.Add(new DailyTrigger {DaysInterval = 2});
tDefinition.Actions.Add(new ExecAction("notepad.exe"));
tService.RootFolder.RegisterTaskDefinition(@"Test", tDefinition, TaskCreation.CreateOrUpdate, 
                                            "NT AUTHORITY\\NETWORKSERVICE", null, 
                                            TaskLogonType.ServiceAccount);

Я использовал приведенный выше код для создания тестовой задачи, которая была успешно добавлена ​​в мой планировщик как Network Service, как показано ниже: enter image description here

Я предполагаю, что один или оба из вышеперечисленных пунктов могли помешать добавлению задачи, надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...