2010-05-12 14 views
2

Je tente de créer une nouvelle tâche dans le planificateur de tâches Windows en C#. Ce que j'ai à ce jour est à peu près un copier-coller de http://bartdesmet.net/blogs/bart/archive/2008/02/23/calling-the-task-scheduler-in-windows-vista-and-windows-server-2008-from-managed-code.aspxException de distribution lors de la création d'une tâche Task Schedulerer

Tout compile très bien mais venez courir le temps que je reçois l'exception suivante:

Impossible de jeter l'objet COM de type « System .__ ComObject » à l'interface de type 'TaskScheduler.ITimeTrigger'. Cette opération a échoué car l'appel QueryInterface sur le composant COM pour l'interface avec IID '{B45747E0-EBA7-4276-9F29-85C5BB300006}' a échoué en raison de l'erreur suivante: Aucune interface de ce type pris en charge (Exception de HRESULT: 0x80004002 (E_NOINTERFACE)) .

Voici tout le code afin que vous puissiez voir ce que je fais ici sans suivre le lien ci-dessus.

TaskSchedulerClass Scheduler = new TaskSchedulerClass(); 

Scheduler.Connect(null, null, null, null); 

ITaskDefinition Task = Scheduler.NewTask(0); 

Task.RegistrationInfo.Author = "Test Task"; 

Task.RegistrationInfo.Description = "Just testing this out."; 

ITimeTrigger Trigger = (ITimeTrigger)Task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_DAILY); 

Trigger.Id = "TestTrigger"; 

Trigger.StartBoundary = "2010-05-12T06:15:00"; 

IShowMessageAction Action = (IShowMessageAction)Task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_SHOW_MESSAGE); 

Action.Id = "TestAction"; 

Action.Title = "Test Task"; 

Action.MessageBody = "This is a test."; 

ITaskFolder Root = Scheduler.GetFolder("\\"); 

IRegisteredTask RegisteredTask = Root.RegisterTaskDefinition("Background Backup", Task, (int)_TASK_CREATION.TASK_CREATE_OR_UPDATE, null, null, _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN, ""); 

La ligne qui jette l'exception est celui

ITimeTrigger Trigger = (ITimeTrigger)Task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_DAILY); 

Le message d'exception fait un peu me sens, mais je crains que je ne sais pas assez sur COM pour savoir vraiment où pour commencer avec ça.

En outre, je devrais ajouter que j'utilise VS 2010 et j'ai dû définir le projet soit pour les processeurs x86 ou x64 au lieu de l'habituel "Any CPU" car il me donnait une exception BadImageFormatException. Je doute que cela soit lié à mon problème actuel, mais juste au cas où je pensais que je pourrais aussi bien le mentionner.

Répondre

2

Vous utilisez une valeur d'énumération différente, pour TASK_TRIGGER_DAILY vous obtiendrez un IDailyTrigger, pas un ITimeTrigger.

Voir this MSDN page.

+0

Ah! Cela l'a réparé. Merci pour votre réponse rapide! Maintenant que je vois ce qui ne va pas, c'est évident. – seaneshbaugh