2010-05-12 3 views
2

Я пытаюсь создать новую задачу в Планировщике задач Windows на C#. То, что я получил до сих пор довольно много копирования и вставки из http://bartdesmet.net/blogs/bart/archive/2008/02/23/calling-the-task-scheduler-in-windows-vista-and-windows-server-2008-from-managed-code.aspxИсключение исключения при попытке создать новую задачу Task Schedueler

Все компилируется нормально, но приходит во время выполнения я получаю следующее исключение:

Невозможно бросить COM объект типа «System .__ ComObject» к типу интерфейса «TaskScheduler.ITimeTrigger». Эта операция завершилась неудачно, потому что вызов QueryInterface в COM-компоненте для интерфейса с IID '{B45747E0-EBA7-4276-9F29-85C5BB300006}' не удалось из-за следующей ошибки: такой интерфейс не поддерживается (исключение из HRESULT: 0x80004002 (E_NOINTERFACE)) ,

Вот и весь код, чтобы вы могли видеть, что я здесь делаю, не следуя приведенной ссылке.

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

Линия, которая бросает исключение это один

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

Сообщение об исключении своего рода имеет смысл для меня, но я боюсь, что я не знаю достаточно о COM, чтобы действительно знать, где для начала.

Кроме того, я должен добавить, что я использую VS 2010, и мне пришлось установить проект либо для процессоров x86, либо для x64 вместо обычного «Any CPU», потому что он продолжал давать мне исключение BadImageFormatException. Я сомневаюсь, что это связано с моей нынешней проблемой, но на всякий случай я подумал, что могу упомянуть об этом.

ответ

2

Вы используете другое значение перечисления, для TASK_TRIGGER_DAILY вы получите IDailyTrigger, а не ITimeTrigger.

См. this MSDN page.

+0

Ах! Это исправило это. Спасибо за быстрый ответ! Теперь, когда я вижу, что не так, это было очевидно. – seaneshbaugh

Смежные вопросы