2016-06-28 3 views
0
только

программно создать задачу TaskScheduler и запустить его Я использую следующий код:.Как установить «Не сохраненную задачу password.The будет иметь доступ к локальным ресурсам компьютера программно в TaskScheduler

var taskDefinition = taskService.NewTask(); 
taskDefinition.RegistrationInfo.Author = WindowsIdentity.GetCurrent().Name; 
taskDefinition.RegistrationInfo.Description = "Runs Programm"; 

// TaskLogonType.S4U = run wether user is logged on or not 
taskDefinition.Principal.LogonType = TaskLogonType.S4U; 

var action = new ExecAction(path, arguments); 
taskDefinition.Actions.Add(action); 
taskService.RootFolder.RegisterTaskDefinition("TaskName", taskDefinition); 

//get task: 
var task = taskService.RootFolder.GetTasks().Where(a => a.Name == "TaskName").FirstOrDefault(); 

try 
{ 
    task.Run(); 
} 
catch (Exception ex) 
{ 
    log.Error("Error starting task in TaskSheduler with message: " + ex.Message); 
} 

Задача создана, и я вижу ее в окне TaskScheduler, но есть один флажок, который я хочу снять. Он называется «Не храните пароль. Задача будет иметь доступ только к локальным ресурсам»

я нашел, как проверить радиокнопку над ним„Запустить ли зарегистрирован пользователь или нет“ Это устанавливается с помощью:

taskDefinition.Principal.LogonType = TaskLogonType.S4U; 

Но как я также установить Галочка под ложной?

+0

Так что же вы хотите? Вы хотите запустить службу у конкретного пользователя независимо от того, вошел ли пользователь в систему или нет, и готов ли хранить пароль? – Kirill

+0

Да, я хочу оба. На самом деле я не понимаю, что означают эти настройки * blush * Но я пробовал эти настройки (установив их в пользовательском интерфейсе) и работал с этими настройками. Но мне нужно, чтобы этот параметр был установлен программно. – Ephedra

ответ

0

Docs говорят

использовать существующий интерактивный маркер для выполнения задачи. пользователь должен войти в систему, используя сервис для пользователей (S4U) логотип п. Когда вход S4U используются, пароль не хранятся в системе и нет доступа к любой сети или зашифрованным файлам

, так что я предполагаю, что это не имеет значения, если вы установите флажок для сохранения пароля или нет.

, которые должны применяться для TASK_LOGON_S4U и TASK_LOGON_SERVICE_ACCOUNT

+0

да, это важно. Только настройка, которую я хочу, работает для меня. Я попробовал оба. – Ephedra

+0

, так что у вас есть: taskDefinition.Principal.LogonType = TaskLogonType.S4U; Попробуйте установить Principal.UserId для некоторых пользователей и установите Principal.RunLevel на LeastPriviledge –

+0

спасибо за советы, к сожалению, это не помогло – Ephedra

2

я, наконец, решил это:

taskService.RootFolder.DeleteTask("TaskName", false); 

var taskDefinition = taskService.NewTask();       
taskDefinition.RegistrationInfo.Author = WindowsIdentity.GetCurrent().Name; 

taskDefinition.RegistrationInfo.Description = "Runs Task with arguments: " + arguments; 
taskDefinition.Principal.LogonType = TaskLogonType.InteractiveTokenOrPassword; 

var action = new ExecAction(path, arguments); 
taskDefinition.Actions.Add(action); 
taskService.RootFolder.RegisterTaskDefinition("TaskName", taskDefinition, TaskCreation.Create, "domain\\user", password, TaskLogonType.InteractiveTokenOrPassword); 

//get task: 
var task = taskService.RootFolder.GetTasks().Where(a => a.Name == ("TaskName").FirstOrDefault(); 
log.Info("Start task " + task.Name + " with arguemtns " + arguments); 

try 
{ 
    task.Run(); 
} 
catch (Exception ex) 
{ 
    log.Error("Error starting task in TaskSheduler with message: " + ex.Message); 
} 
+0

Это работает. Благодарю. Но вы должны установить пароль. Плохой процесс безопасности. –

 Смежные вопросы

  • Нет связанных вопросов^_^