2012-08-16 27 views

回答

3

您可以将UserId设置为SYSTEM,它会自动设置'运行用户是否登录'选项。

using (TaskService ts = new TaskService()) 
{ 
    var newTask = ts.NewTask(); 
    newTask.Principal.UserId = "SYSTEM"; 
    newTask.Triggers.Add(new TimeTrigger(DateTime.Now)); 
    newTask.Actions.Add(new ExecAction("notepad")); 
    ts.RootFolder.RegisterTaskDefinition("NewTask", newTask); 
} 

执行上述代码的程序必须以管理员身份运行。

找到这个解决方案张贴在这里的评论,http://taskscheduler.codeplex.com/wikipage?title=Examples

3
ITaskFolder rootFolder = taskService.GetFolder(@"\"); 
rootFolder.RegisterTaskDefinition(taskName, 
            taskDefinition, 
            (int)_TASK_CREATION.TASK_CREATE_OR_UPDATE, 
            null, 
            null, 
            _TASK_LOGON_TYPE.TASK_LOGON_S4U, 
            null); 

我只是尝试使用所有_TASK_LOGON_TYPE,发现“TASK_LOGON_S4U”工作设置运行用户是否登录或不。有关的TaskScheduler http://msdn.microsoft.com/en-us/library/windows/desktop/bb736357(v=vs.85).aspx 详细

3

要的TaskScheduler创建任务与设置:“运行羯羊用户loggd或不”使用下面的代码:

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

        taskDefinition.RegistrationInfo.Description = "Runs Application"; 

        // 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("NameOfApplication", taskDefinition); 

注:我不与触发器工作这里。您可以直接从代码中使用以下代码启动创建的任务:

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

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