Как настроить «запускать только при входе в систему» ​​и «запускать от имени» с помощью TaskScheduler на C#?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как настроить «запускать только при входе в систему» ​​и «запускать от имени» с помощью TaskScheduler на C#?

Сообщение Anonymous »

Я пытаюсь использовать управляемую оболочку планировщика задач C# для программного создания запланированных задач в системе Windows. Я могу создавать задачи, но не могу заставить их запускаться только при входе в учетную запись:

[img]https: //i.sstatic.net/C2r1b.png[/img]


Я осмотрелся и нашел еще один ТАК-вопрос, который был задан в прошлом году, но либо есть другие соответствующие настройки, которые не упомянуты, или что-то в базе кода изменилось с тех пор:

Как установить «запускать только при входе в систему» ​​и «запускать от имени» с TaskScheduler на C#?

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


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


Я использую следующий код:

Код: Выделить всё

    public static void ScheduleTask(string machineName, string taskName, string taskAccount, string password)
{
using (TaskService ts = new TaskService(machineName))
{
TaskDefinition td = ts.NewTask();

td.Principal.RunLevel = TaskRunLevel.Highest;
td.Principal.UserId = WindowsIdentity.GetCurrent().Name;
td.Principal.LogonType = TaskLogonType.InteractiveToken;

td.Settings.MultipleInstances = TaskInstancesPolicy.IgnoreNew;
td.Settings.DisallowStartIfOnBatteries = false;
td.Settings.StopIfGoingOnBatteries = false;
td.Settings.StartWhenAvailable = true;
//td.Settings.RunOnlyIfLoggedOn = true;
td.Settings.Enabled = true;
td.Settings.Hidden = false;
td.Settings.AllowHardTerminate = true;
td.Settings.ExecutionTimeLimit = new TimeSpan();

var tt = new SessionStateChangeTrigger();
tt.StartBoundary = DateTime.Now.AddMinutes(1);
tt.UserId = taskAccount;
tt.StateChange = TaskSessionStateChangeType.RemoteConnect;
tt.Repetition.Interval = TimeSpan.FromMinutes(1);
tt.Repetition.StopAtDurationEnd = false;
td.Triggers.Add(tt);

td.Actions.Add("notepad.exe", "c:\\test.log");

ts.RootFolder.RegisterTaskDefinition(taskName, td, TaskCreation.CreateOrUpdate, taskAccount, password, TaskLogonType.Password, null);
}
}
Если я запускаю этот код с действительным сервером, пользователем и т. д., он генерирует задачу без проблем. Если я прокомментирую параметр RunOnlyIfLoggedOn, это приведет к ошибке, о которой я упоминал ранее. Обратите внимание: я устанавливаю для свойства LogonType значение TaskLogonType.InteractiveToken, поэтому должно быть что-то еще, чего мне не хватает.

Подробнее здесь: https://stackoverflow.com/questions/435 ... duler-in-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»