2012-08-16 3 views

Répondre

3

Vous pouvez définir l'ID utilisateur sur SYSTEM et définir automatiquement l'option 'Exécuter si l'utilisateur est connecté ou non'.

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

Le programme exécutant le code ci-dessus doit s'exécuter en tant qu'administrateur.

trouvé cette solution a écrit dans les commentaires ici, 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); 

J'essaie juste d'utiliser tous _TASK_LOGON_TYPE et a constaté que le travail « TASK_LOGON_S4U » pour la mise en Run si l'utilisateur est connecté ou non. Détails sur TaskScheduler http://msdn.microsoft.com/en-us/library/windows/desktop/bb736357(v=vs.85).aspx

3

Pour créer une tâche dans TaskScheduler avec le réglage: « course wether utilisateur est loggd ou non » utilisez le code suivant:

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

Note: Je ne fonctionnent pas avec un déclencheur ici. Vous pouvez démarrer la tâche créée directement à partir du code avec le code suivant:

    //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); 
        } 
Questions connexes