2011-11-17 2 views
5

J'ai du code qui utilise l'objet C# TaskManager pour créer une tâche. Sur Windows 7, cela fonctionne très bien mais sur Windows XP (et vraisemblablement sur d'autres Windows) cela ne fonctionne pas du tout parce que l'utilisateur par défaut pour la tâche est le système et donc il n'y a pas de session pour l'interface graphique. Si je modifie manuellement la tâche créée dans le widget du panneau de configuration pour que le travail s'exécute uniquement lorsque l'utilisateur est connecté et uniquement pour l'utilisateur particulier, tout fonctionne parfaitement. Mais malgré les heures de recherche, je ne vois aucune option pour définir ces options dans les objets C#. Quelqu'un connaît une solution avec les objets existants? Je détesterais réécrire tout pour exécuter manuellement le scheduler EXE et passer en stuff par la ligne de commande.Comment définir "exécuter uniquement si connecté" et "exécuter en tant que" avec TaskScheduler en C#?

Q

+1

L'interface du planificateur de tâches est basée sur COM, vous aurez besoin de IScheduledWorkItem :: SetFlags() par exemple. Il n'y a pas d'objet "C# TaskManager". Peut-être que vous devriez poster un lien vers le code que vous avez trouvé quelque part? –

+0

Merci! J'ai fini par le découvrir par moi-même, mais vous aviez raison de dire que j'avais utilisé un emballage tiers, je ne m'en suis pas rendu compte! J'ai posté la solution. –

+0

@QuinxyvonBesiex Vous devez ajouter votre réponse ci-dessous, puis après le temps requis, sélectionnez-la comme réponse - pour garder les choses propres. – Prescott

Répondre

4

D'accord, je me suis dit la réponse!

Je ne m'en suis pas rendu compte mais j'utilisais une tierce personne Task Scheduler Managed Wrapper (cela faisait un moment que j'avais écrit cette partie de mon code) et cela explique pourquoi l'aide était difficile à trouver! J'ai trébuché sur cette page il y a un instant et juste là dans leurs exemples était juste ce dont j'avais besoin! Le detailed solution in context can be found here, mais la partie clé est:

// Create a new task definition and assign properties 
TaskDefinition td = ts.NewTask(); 
td.Principal.UserId = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 
td.Principal.LogonType = TaskLogonType.InteractiveToken; 

Merci d'avoir essayé d'aider!

+0

Il ne suffit pas simplement de définir le type de connexion dans certains cas. Si cette réponse ne fonctionne pas à elle seule, consultez cette question: http: //stackoverflow.com/questions/43599271/how-to-set-run-only-if-logged-in-and-run-as- avec-taskscheduler-en-c/43767201 # 43767201 – MadTigger

Questions connexes