2017-10-21 21 views
1

TaskScheduler COM Interop libを使用してログオンタスクを作成しようとしています。 以下のコードは、TASK_TRIGGER_LOGONトリガーまたはTASK_TRIGGER_SESSION_STATE_CHANGEトリガーのタスクを作成していません。その後もTaskscheduler COM Interop C# - ログオンタスク

 //create task scheduler instance 
     TaskScheduler.TaskScheduler taskService = new TaskScheduler.TaskScheduler(); 
     taskService.Connect(); 
     ITaskDefinition taskDefinition = taskService.NewTask(0); 
     taskDefinition.Settings.Enabled = true; 
     taskDefinition.Settings.Compatibility = _TASK_COMPATIBILITY.TASK_COMPATIBILITY_V2_4; 

     //create trigger for task creation. 
     ITriggerCollection _iTriggerCollection = taskDefinition.Triggers; 
     ITrigger _trigger = _iTriggerCollection.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_LOGON); 
     _trigger.Enabled = true; 

     ///get actions. 
     IActionCollection actions = taskDefinition.Actions; 
     _TASK_ACTION_TYPE actionType = _TASK_ACTION_TYPE.TASK_ACTION_EXEC; 

     //create new action 
     IAction action = actions.Create(actionType); 
     IExecAction execAction = action as IExecAction; 
     execAction.Path = @"calc.exe"; 
     ITaskFolder rootFolder = taskService.GetFolder(@"\"); 

     //register task. 
     rootFolder.RegisterTaskDefinition("test", taskDefinition, 6, null, null, _TASK_LOGON_TYPE.TASK_LOGON_NONE, null); 

トリガがTASK_TRIGGER_TIMEであれば、それが正常に動作してタスクを作成します。例えば

 //create trigger for task creation. 
     ITriggerCollection _iTriggerCollection = taskDefinition.Triggers; 
     ITrigger _trigger = _iTriggerCollection.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME); 
     _trigger.StartBoundary = DateTime.Now.AddSeconds(15).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss"); 
     _trigger.EndBoundary = DateTime.Now.AddMinutes(1).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss"); 
     _trigger.Enabled = true; 

答えて

0

は、それが動作するように作られました。ここでコードスニペットに興味がある人は、ここに行きます。

 //create task service instance 
     TaskScheduler.TaskScheduler taskService = new TaskScheduler.TaskScheduler(); 
     taskService.Connect(); 
     ITaskDefinition taskDefinition = taskService.NewTask(0); 
     taskDefinition.Settings.Enabled = true; 
     taskDefinition.RegistrationInfo.Author = "Desklight"; 
     taskDefinition.Principal.RunLevel = _TASK_RUNLEVEL.TASK_RUNLEVEL_LUA; 
     taskDefinition.Settings.AllowDemandStart = true; 
     taskDefinition.Settings.StartWhenAvailable = true; 
     taskDefinition.Settings.DisallowStartIfOnBatteries = false; 
     taskDefinition.Settings.Compatibility = _TASK_COMPATIBILITY.TASK_COMPATIBILITY_V2_4; 

     //create trigger for task creation. 
     ITriggerCollection _iTriggerCollection = taskDefinition.Triggers; 
     ISessionStateChangeTrigger sessionStateChangeTrigger = (ISessionStateChangeTrigger)_iTriggerCollection.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_SESSION_STATE_CHANGE); 
     sessionStateChangeTrigger.Id = "UnlockTrigger"; 
     sessionStateChangeTrigger.StateChange = _TASK_SESSION_STATE_CHANGE_TYPE.TASK_SESSION_UNLOCK; 
     sessionStateChangeTrigger.UserId = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 
     sessionStateChangeTrigger.Enabled = true; 

     //get actions. 
     IActionCollection actions = taskDefinition.Actions; 
     _TASK_ACTION_TYPE actionType = _TASK_ACTION_TYPE.TASK_ACTION_EXEC; 

     //create new action 
     IAction action = actions.Create(actionType); 
     IExecAction execAction = action as IExecAction; 
     execAction.Path = getExecutable(silent); 
     ITaskFolder rootFolder = taskService.GetFolder(@"\"); 

     //register task. 
     const int TASK_CREATE_OR_UPDATE = 6; 
     string taskName = "Desklight-" + Environment.UserName; 
     rootFolder.RegisterTaskDefinition(taskName, taskDefinition, TASK_CREATE_OR_UPDATE, null, null, _TASK_LOGON_TYPE.TASK_LOGON_NONE, null); 
関連する問題