Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Taskscheduler COM互操作C#-登录任务_C#_Scheduled Tasks_Com Interop - Fatal编程技术网

Taskscheduler COM互操作C#-登录任务

Taskscheduler COM互操作C#-登录任务,c#,scheduled-tasks,com-interop,C#,Scheduled Tasks,Com Interop,正在尝试使用TaskScheduler COM互操作库创建登录任务。 下面的代码没有为任务触发\u登录触发或任务触发\u会话\u状态更改触发创建任务 //create task scheduler instance TaskScheduler.TaskScheduler taskService = new TaskScheduler.TaskScheduler(); taskService.Connect(); ITaskDefin

正在尝试使用TaskScheduler COM互操作库创建登录任务。 下面的代码没有为
任务触发\u登录
触发或
任务触发\u会话\u状态更改
触发创建任务

        //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\u trigger\u 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;

成功了。如果有人对代码片段感兴趣,请点击这里

        //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);

成功了。如果有人对代码片段感兴趣,请点击这里

        //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);